如何设置JFrame的最小大小,以阻止用户将其调整为较小?

时间:2017-03-22 14:34:13

标签: java swing jframe

我有一个JFrame,它不能小于特定的大小,或者元素不能正确布局。

我尝试setMinimumSize()并覆盖此框架的getMinimumSize()方法,但我仍然可以将框架调整为更小。

因此,我必须在componentListener时听取componentResized()中的界限更改,如果它更小,请使用setBounds()将其设置回正常大小吗?< / p>

2 个答案:

答案 0 :(得分:6)

由于缺乏可编译的代码,很难分辨出代码中出现的问题。可能是setMinimumSize(..)在错误的时间和/或错误的值发出的呼叫。

此处,此代码不允许框架比第一次显示的框架小,但允许用户将框架拖得更大。查看评论以获取提示。

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class MinimumSizeFrame {

    private JComponent ui = null;

    MinimumSizeFrame() {
        initUI();
    }

    public void initUI() {
        ui = new JPanel(new BorderLayout(4,4));

        JLabel label = new JLabel("Text in big label");
        label.setBorder(new EmptyBorder(40, 100, 40, 100));
        ui.add(label);
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                MinimumSizeFrame o = new MinimumSizeFrame();

                JFrame f = new JFrame(o.getClass().getSimpleName());
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack(); // have the JVM calculate the ideal size of this GUI
                f.setMinimumSize(f.getSize()); // now use that as minimum!

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

答案 1 :(得分:2)

您可以尝试在帧初始化中使用以下属性以避免调整大小

setResizable(false);