JFrame.setResizable(假);不工作

时间:2013-11-08 21:12:19

标签: java window jframe jpanel resizable

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

我使用'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);

我创建了一个Component Listener:

    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始终保持不变。它既没有拉伸也没有最小化。

非常感谢帮助:)

真诚的费利克斯

2 个答案:

答案 0 :(得分:2)

到目前为止,针对此烦人问题的最佳补丁如下。你调用setResizable(false)方法的地方并不重要。只需在setVisible(true)之后添加这段代码。

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

yourWidth width ,您可以通过任何可能的方式设置,手动或通过覆盖setPreferredSize方法。解释非常简单,frame.pack()似乎以某种方式重置frame.setResizable(boolean b)。您可以使用if代替while循环,但我更喜欢while来排除即使在第二个pack()之后窗口仍然是超大的情况。

答案 1 :(得分:0)

您是否初始化变量jframe或者您是否正在调用普通类?

因为如果你这样做:

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

对我来说很好......