【问题标题】:Setting minimum size limit for a window in java swing在java swing中设置窗口的最小大小限制
【发布时间】:2012-08-30 18:57:55
【问题描述】:

我有一个 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$

给我像

这样的输出

**更新:** 虽然 Netbeans IDE 运行时给出了预期的输出,但结果相同。当我通过“java JFrameExample”编译器运行时,我遇到了问题。现在,这意味着什么??

【问题讨论】:

  • 您在什么平台上,您使用的是什么版本的 Java?
  • 你知道你的java 6的具体更新号吗?键入“java -version”,您应该会看到类似:java 版本“1.6.0_18”,18 将是更新#。可能存在仅在更高版本的 java 6 中修复的错误
  • 最重要的是,您能否编辑您的帖子,给我们一个代码的小示例,以便向我们展示问题。
  • 我只是复制并粘贴了您的代码并运行它。同样的问题发生了..我仍然有同样的问题..
  • 问题已解决...我使用的是 java 1.5.0.. 而 netbeans 使用的是 java 1.6.0_20.. 所以,新版本解决了这个问题..

标签: java user-interface swing jframe


【解决方案1】:

documentation 告诉我,这种行为取决于平台。特别是,因为以下示例代码在 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);
    }
}

【讨论】:

  • 也适用于我(在 Ubuntu 9、java 6、gnome 上)。
  • 我在 ubuntu 9.10,java 6,Gnome 上。它不适合我。我希望你能确定我的问题。我不希望在某个阈值后最小化我的窗口...
  • 适用于 Ubuntu 14.04、Java 7、Gnome/Unity。
  • 适用于 macOS 10.15、Java 14
【解决方案2】:

实际上有一种方法可以确保任何平台上的最小尺寸。您需要将 JFrame 的最小尺寸设置为其内容窗格的最小尺寸,然后您需要编写一个 ComponentAdapter 并覆盖 componentResized。然后,您只需在 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);
        }
    });

【讨论】:

  • frame.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e){ Dimension d= frame.getSize(); Dimension minD=frame.getMinimumSize(); if(d.width&lt;minD.width) d.width=minD.width; if(d.height&lt;minD.height) d.height=minD.height; frame.setSize(d); } });
    其中frame被声明为类成员private JFrame frame;Demo Code, need to download
猜你喜欢
  • 2010-12-28
  • 2018-09-20
  • 2013-10-05
  • 1970-01-01
  • 2012-01-01
  • 2023-04-11
  • 1970-01-01
  • 2014-07-20
  • 2010-10-11
相关资源
最近更新 更多