【问题标题】:Setting the Maximum size of a JFrame while launching the application启动应用程序时设置 JFrame 的最大大小
【发布时间】:2012-03-16 15:34:25
【问题描述】:

我想在启动应用程序时设置 JFrame 的最大大小。 问题是,如果屏幕分辨率更高,我的框架会变得更大,但当时它不应该超过定义的最大范围,但同样的情况在低分辨率下也能正常工作。

就像我希望我的框架最大为 (500,500) ,所以我写了这段代码:

JFrame frame = new JFrame("FRAME TRANSPARENT");
frame.setSize((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()-50), (int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()-150));
frame.setMaximizedBounds(new Rectangle(0,0 , 500, 500)); 
frame.setVisible(true);

即使我设置了 Bound,JFrame 也在考虑 setSize 方法,它似乎忽略了 setMaximizedBounds 方法。 我已经尝试过使用 setMaximumized 方法,但得到了相同的输出。

【问题讨论】:

  • 为什么是setMaximizedBounds 而不是setMaximumSize

标签: java swing jframe


【解决方案1】:

我试过了,你说得对,setMaximumSize() 不起作用.. 这么多年都不知道!!!大多数情况下,我对限制大小的要求是由setResizable(false) 固定的,尽管我看到您对最小和最大大小有不同的具体查询

为您制定了解决方案:

public class MaxSizeUI
{
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MaxSizeUI().makeUI();
            }
        });
    }

    public void makeUI() {
        final JFrame frame = new JFrame("Sample Fram") {

            @Override
            public void paint(Graphics g) {
                Dimension d = getSize();
                Dimension m = getMaximumSize();
                boolean resize = d.width > m.width || d.height > m.height;
                d.width = Math.min(m.width, d.width);
                d.height = Math.min(m.height, d.height);
                if (resize) {
                    Point p = getLocation();
                    setVisible(false);
                    setSize(d);
                    setLocation(p);
                    setVisible(true);
                }
                super.paint(g);
            }
        };
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 150);
        frame.setMaximumSize(new Dimension(400, 200));
        frame.setMinimumSize(new Dimension(200, 100));
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

【讨论】:

  • 这会使您的帧在达到最大宽度或高度时在屏幕上闪烁。在某些情况下,它会进入一个无限循环,隐藏自己并重新显示。
【解决方案2】:

一种可能的解决方案是:

Dimension DimMax = Toolkit.getDefaultToolkit().getScreenSize();
frame.setMaximumSize(DimMax);

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

【讨论】:

    【解决方案3】:

    使用维度
    Dimension d=getMaximumSize(); Frame.setSize(d.width, d.height);

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-08
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      相关资源
      最近更新 更多