【问题标题】:Prevent JPanel from cutting off subcomponents防止 JPanel 切断子组件
【发布时间】:2012-07-10 10:13:01
【问题描述】:

我试图防止 JPanle 变得如此之小以至于它会切断它的子组件,是否有强制执行此操作?在阅读this 之后,我尝试了(在 jython 中):

frame= JFrame('example', size=(200,200))

pan = JPanel()
pan.add(JLabel('beer'))
pan.add(JButton('get one', actionPerformed=printer))
pan.setMinimumSize(panel.getPreferredSize())

frame.add(pan)
frame.visible = True

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

【问题讨论】:

  • 你想要的行为是什么?你想让 JFrame 拒绝缩小,你想让滚动条出现在边缘,还是别的什么?
  • 我希望 JFrame/面板(想想 Frame 中的多个面板)拒绝收缩。对于滚动条,我知道JScrollPane。问题是,如果我以同样的方式在框架上使用setMinimumSize,它仍然会变得如此之小以至于按钮将被切断(如果我将minimumSize 应用于frame 而不是面板,则标签始终完全可见

标签: swing jpanel jython


【解决方案1】:

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

frame.setMinimumSize(frame.getPreferredSize());

如果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();
            }
        });
    }

}

【讨论】:

  • 很好,转移很容易,我只是添加了它,所以人们不会怀疑语法,我最近一直在使用 Jython,所以我不想发布错误的 java 语法或在发布之前翻译每个最小示例。感谢您对Some nice 示例的回答
猜你喜欢
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多