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

Java 如何设置JFrame的最小大小,以阻止用户将其调整为更小?,java,swing,jframe,Java,Swing,Jframe,我有一个JFrame,它不能小于特定的大小,或者元素不能正确布局 我试图setMinimumSize()并覆盖此框架的getMinimumSize()方法,但我仍然可以将框架大小调整为更小 因此,当ComponentResistized()时,我必须在我的componentListener中监听边界的更改,如果它更小,请使用setBounds()将其设置回正常大小?您可以尝试在帧初始化中使用以下属性以避免调整大小 setResizable(false); 您可以尝试在帧初始化中使用Lower属

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

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


因此,当
ComponentResistized()
时,我必须在我的
componentListener
中监听边界的更改,如果它更小,请使用
setBounds()
将其设置回正常大小?

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

setResizable(false);

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

setResizable(false);

由于缺乏可编译的代码,很难判断代码中出现了什么问题。调用
setMinimumSize(..)
可能发生在错误的时间和/或使用错误的值

在这里,此代码将不允许帧变小,而允许用户将其拖大。查看评论中的提示

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

public class MinimumSizeFrame {

    private JComponent ui = null;

    MinimumSizeFrame() {
        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 = () -> {
            MinimumSizeFrame o = new MinimumSizeFrame();

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

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

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

由于缺乏可编译的代码,很难判断代码中出现了什么问题。调用
setMinimumSize(..)
可能发生在错误的时间和/或使用错误的值

在这里,此代码将不允许帧变小,而允许用户将其拖大。查看评论中的提示

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

public class MinimumSizeFrame {

    private JComponent ui = null;

    MinimumSizeFrame() {
        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 = () -> {
            MinimumSizeFrame o = new MinimumSizeFrame();

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

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

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

这本应该奏效的。至少,它可以在linux上工作。Cf已经讨论过了是的,谢谢你的链接。现在有了这个问题,我们从Andrew那里得到了一个更好的解决方案。它应该是有效的。至少,它可以在linux上工作。Cf已经讨论过了是的,谢谢你的链接。现在有了这个问题,我们从Andrew那里得到了一个更好的解决方案。然后,您失去了最小和最大大小之间的灵活性。当您失去最小和最大大小之间的灵活性时,请在
pack()之后调用
setMinimumSize()
。这在我的情况下起作用。这让我对Java Swing恢复了信心。谢谢!好的,在
pack()之后调用
setMinimumSize()
。这在我的情况下起作用。这让我对Java Swing恢复了信心。谢谢!