java – 为什么调用JFrame.pack()会增加额外的空间?
发布时间:2020-12-15 08:50:03 所属栏目:Java 来源:网络整理
导读:最初,我使用的代码工作正常,但有点令人费解.将方法的某些部分移动到JFrame的构造函数后,事情正常. 除了使用pack()之外的所有东西都能使框架成为合适的尺寸. 这是原始代码: public class BaseGameFrame extends JFrame {public static final int WINDOWED =
最初,我使用的代码工作正常,但有点令人费解.将方法的某些部分移动到JFrame的构造函数后,事情正常.
除了使用pack()之外的所有东西都能使框架成为合适的尺寸. 这是原始代码: public class BaseGameFrame extends JFrame { public static final int WINDOWED = 0; public static final int UFS = 1; protected BaseGamePanel gamePanel; public BaseGameFrame(String title,int pWidth,int pHeight,long period,int windowType){ super(title); switch(windowType){ case UFS: this.setUndecorated(true); Rectangle screenSize = this.getGraphicsConfiguration().getBounds(); pWidth = screenSize.width; pHeight = screenSize.height; break; default: break; } this.setVisible(true); this.setResizable(false); this.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); this.createPanel(pWidth,pHeight,period); } protected void createPanel(final int pWidth,final int pHeight,long period){ this.gamePanel = new BaseGamePanel(pWidth,period); this.add(this.gamePanel); this.pack(); } public static void main(String[] args){ new BaseGameFrame("Test",800,600,20L * 1000000L,UFS); } } 这是在修改它之后: public class BaseGameFrame extends JFrame { protected BaseGamePanel gamePanel; public BaseGameFrame(String title,VideoType vType,BaseGamePanel gp){ super(title); switch(vType){ case UFS: this.setUndecorated(true); Rectangle screenSize = this.getGraphicsConfiguration().getBounds(); gp.setPDimensions(new Dimension(screenSize.width,screenSize.height)); break; default: break; } this.add(gp); this.pack(); this.setVisible(true); this.setResizable(false); this.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args){ BaseGamePanel gp = new BaseGamePanel(800,20L * 1000000L); new BaseGameFrame("Test",VideoType.UFS,gp); } } 我不太确定问题是什么……但最终发生的事情是: 解决方法
确保在调用pack()或setVisible(true)之前调用setResizable(false)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |