我有这个小代码
public class Test extends JFrame {
public static void main(String[] args) {
new Test();
}
Test() {
getContentPane().add(new MyPanel());
pack();
setVisible(true);
}
private class MyPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
setSize(640, 480);
setPreferredSize(new Dimension(640, 480));
setMinimumSize(new Dimension(640, 480));
g.fillRect(20, 20, 50, 50);
}
}
不幸的是,在调用pack()
后框架未调整大小到嵌套面板的大小。我已经阅读了这个主题的相关答案,但没有一个有帮助。你能帮我解决一下吗?
答案 0 :(得分:4)
执行pack()
时,面板仍然不可见,其paintComponent()
未执行,因此setPreferredSize()
也未执行。
但请勿从setPreferredSize
致电paintComponent()
。你在paintComponent
中的绘画没有别的。避免将程序逻辑放入该方法中。绘画操作应该快速和优化,以获得更好的性能和用户体验。有关详细信息,请参阅Performing Custom Painting。
覆盖面板的getPrefferedSize()
,或者至少在pack()
之前执行setPrefferedSize。
另见Should I avoid the use of set[Preferred|Maximum|Minimum]Size methods in Java Swing。
答案 1 :(得分:2)
public MyPanel() {
setPreferredSize(new Dimension(640, 480));
}