0

我正在为新游戏开发在线模式,为了防止作弊,我需要修复窗口大小(并且两个玩家都需要一个大小相同的窗口)。

我使用了'jframe.setResizable(false);' 但它似乎是“小故障”。

当我单击窗口并将其从屏幕边框移开时,Windows 会最小化它。

这是一个关于它的视频: http ://www.youtube.com/watch?v=AQ7OHJOuLSk&feature=youtu.be

我尝试了以下代码来修复它:

  Dimension d = new Dimension(width, height);
    panel.getJFrame().setMaximumSize(d);
    panel.getJFrame().setMinimumSize(d);
    panel.setMaximumSize(d);
    panel.setMinimumSize(d);

我创建了一个组件监听器:

    if (max_height!=-1){
        if (e.getComponent().getSize().getHeight()>max_height){
            e.getComponent().setSize((int) e.getComponent().getSize().getWidth(),max_height);
        }
    }
    if (max_width!=-1){
        if (e.getComponent().getSize().getHeight()>max_width){
            e.getComponent().setSize(max_width,(int) e.getComponent().getSize().getHeight());
        }

我尝试使用 Layouts 但没有任何效果。

我现在需要的是防止最小化“故障”(如果是故障)的可能性,或者是一种使 JPanel 不可调整大小的方法。就像 JFrame 窗口的大小改变时一样,JPanel 始终保持不变。它既没有拉伸也没有最小化。

非常感谢您的帮助:)

真诚的菲利克斯

4

2 回答 2

2

到目前为止,解决这个烦人问题的最佳补丁如下。调用方法的位置无关紧要setResizable(false)。只需在您之后添加这段代码setVisible(true)

private void sizeBugPatch() {
    while (frame.getWidth() > yourWidth) {
        frame.pack();
    }
}

您以任何可能的方式设置yourWidth宽度在哪里,无论是手动还是通过覆盖setPreferredSize方法。解释很简单,frame.pack()似乎以frame.setResizable(boolean b)某种方式重置。您可以使用 anif而不是while循环,但我更愿意while排除即使在 second 之后窗口仍然会超大的情况pack()

于 2016-07-21T18:51:35.017 回答
0

您是初始化变量jframe还是调用通用类?

因为如果你这样做:

JFrame frame = new JFrame();
frame.setResizable(false);

这对我来说可以...

于 2015-03-16T11:55:21.097 回答