Java 从paintComponent方法调整大小
我有这个小代码Java 从paintComponent方法调整大小,java,swing,jpanel,paintcomponent,preferredsize,Java,Swing,Jpanel,Paintcomponent,Preferredsize,我有这个小代码 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
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()
后,框架的大小未调整为嵌套面板的大小。我已经阅读了这个主题的相关答案,但没有一个有帮助。您能给我一个解决方案吗?当执行pack()
时,面板仍然不可见,其paintComponent()
未执行,因此setPreferredSize()
也未执行
public MyPanel() {
setPreferredSize(new Dimension(640, 480));
}
但是不要从paintComponent()
调用setPreferredSize
。在paintComponent
中进行绘制,无需其他操作。避免将程序逻辑放入该方法中。喷漆操作应快速且优化,以获得更好的性能和用户体验。有关更多详细信息,请参阅
覆盖面板的getPreferedSize()
,或者至少在pack()
之前执行setPreferedSize
另见 试图在
paintComponent(Graphics)
中更改GUI的状态将导致故障。不要这样做。-1表示无需设置PreferredSize(注意:在极少数情况下可能存在这种需要:-)