加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读