Swing 防止JPanel切断子组件

Swing 防止JPanel切断子组件,swing,jpanel,jython,Swing,Jpanel,Jython,我试图阻止一个JPanle变得如此之小,以至于它切断了它的子组件,有没有强制执行这一点?阅读后,我尝试(在jython): 但是,即使我将最小尺寸应用于框架,面板仍然可以缩小到可以切断其组件(在JFrame或中)。如何防止这种情况?(我假设我得到的首选大小不是我想要的,因为使用默认布局管理器,它似乎是最大子组件的大小,但如果我将其更改为例如GridBagLayout它似乎会变小9,请应用minsize来设置并尝试)您可以在JFrame上使用它(抱歉,它是Java,我不熟悉Jython): 如果J

我试图阻止一个JPanle变得如此之小,以至于它切断了它的子组件,有没有强制执行这一点?阅读后,我尝试(在jython):


但是,即使我将最小尺寸应用于框架,面板仍然可以缩小到可以切断其组件(在JFrame或中)。如何防止这种情况?(我假设我得到的首选大小不是我想要的,因为使用默认布局管理器,它似乎是最大子组件的大小,但如果我将其更改为例如
GridBagLayout
它似乎会变小9,请应用minsize来设置并尝试)

您可以在JFrame上使用它(抱歉,它是Java,我不熟悉Jython):

如果
JFrame
的内容窗格的
LayoutManager
强制执行最小大小,则代码可以工作。但是,默认情况下,您会得到一个
BorderLayout
,但它不会。如果使用了
frame.setMinimumSize(pan.getPreferredSize()),它将不起作用,因为帧的大小包括其插入部分(即帧边框的大小),因此您设置的最小大小实际上太小

下面是一个小演示,演示如何在JFrame上使用最小尺寸:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestMinimumSizeOnFrame {

    protected void initUI() {
        JFrame frame = new JFrame("example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200, 200);

        JPanel pan = new JPanel();
        pan.add(new JLabel("Some nice beer"));
        pan.add(new JButton("get one"));
        frame.add(pan);
        frame.setVisible(true);
        frame.setMinimumSize(frame.getPreferredSize());

    }

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

}

你想要的行为是什么?你想让JFrame拒绝收缩,你想让滚动条出现在边缘上,还是其他什么?我想让JFrame/panel(在框架中考虑多个面板)拒绝收缩。对于滚动条,我知道
JScrollPane
。问题是,如果我以同样的方式在帧上使用
setMinimumSize
,它仍然会变得很小,以至于按钮会被切断(如果我将
minimumSize
应用到
frame
而不是panel,标签总是完全可见的。这很好,传输很容易,我添加了它,这样人们就不会对语法感到奇怪,我最近一直在与Jython合作,所以我不想在发布之前发布错误的java语法或翻译每个最小的示例。谢谢你或者用
一些好的
例子来回答你的问题
frame.setMinimumSize(frame.getPreferredSize());
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestMinimumSizeOnFrame {

    protected void initUI() {
        JFrame frame = new JFrame("example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200, 200);

        JPanel pan = new JPanel();
        pan.add(new JLabel("Some nice beer"));
        pan.add(new JButton("get one"));
        frame.add(pan);
        frame.setVisible(true);
        frame.setMinimumSize(frame.getPreferredSize());

    }

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

}