我正在为新游戏使用在线模式,为了防止作弊,我需要固定窗口大小(并且两个玩家都需要一个具有相同大小的窗口)。

我用了'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始终保持不变。它既不张扬,也不最小化。

非常感谢帮助:)

真诚的费利克斯

最佳答案

到目前为止,解决此烦人问题的最佳方法如下。不管您在何处调用setResizable(false)方法。只需在setVisible(true)之后添加这段代码。

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


其中yourWidth是您通过任何可能的方式手动或通过覆盖setPreferredSize方法设置的宽度。解释很简单,frame.pack()似乎以某种方式重置了frame.setResizable(boolean b)。您可以使用if而不是while循环,但是我更喜欢while排除即使在第二个pack()之后窗口仍会过大的情况。

09-26 11:16