在 java swing 中为窗口设置最小大小限制

2022-09-01 09:42:52

我有一个JFrame,它在GridBagLayout中有3个JPanel

现在,当我最小化一个窗口时,在一定的限制之后,第三个JPanel往往会消失。我尝试使用setMinimumSize(new Dimension(int,int))设置最小化JFrame的大小,但没有成功。窗口仍然可以最小化。

所以,我实际上想做一个脱粒,我的窗口在一定限度后不能最小化。

我该怎么做?

代码:-

import java.awt.Dimension;

import javax.swing.JFrame;

public class JFrameExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Hello World");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setMinimumSize(new Dimension(400, 400));
        frame.setVisible(true);
    }
}

也:

shadyabhi@shadyabhi-desktop:~/java$ java --showversion
java version "1.5.0"
gij (GNU libgcj) version 4.4.1

Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Usage: gij [OPTION] ... CLASS [ARGS] ...
          to invoke CLASS.main, or
       gij -jar [OPTION] ... JARFILE [ARGS] ...
          to execute a jar file
Try `gij --help' for more information.
shadyabhi@shadyabhi-desktop:~/java$

给我输出像

alt text

**更新: **尽管 Netbeans IDE 给出了预期的输出,但运行时也是如此。当我运行“java JFrameExample”编译器时,我遇到了问题。现在,这意味着什么??


答案 1

文档告诉我,此行为与平台相关。特别是,由于以下示例代码在Windows Vista中根据需要为我工作:

import java.awt.Dimension;

import javax.swing.JFrame;

public class JFrameExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Hello World");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setMinimumSize(new Dimension(100, 100));
        frame.setVisible(true);
    }
}

答案 2

实际上,有一种方法可以确保在任何平台上的最小大小。您需要将 JFrame 的最小大小设置为其内容窗格的最小大小,然后需要编写一个组件适配器并覆盖组件Resized。然后,您只需在 JFrame 上使用 getSize 和 getMinimum 大小,如果宽度和/或高度较大,则将其替换为最小宽度或高度。假设您正在扩展 JFrame:

this.addComponentListener(new ComponentAdapter(){
        public void componentResized(ComponentEvent e){
            Dimension d=YourJFrame.this.getSize();
            Dimension minD=YourJFrame.this.getMinimumSize();
            if(d.width<minD.width)
                d.width=minD.width;
            if(d.height<minD.height)
                d.height=minD.height;
            YourJFrame.this.setSize(d);
        }
    });

推荐