我试图阻止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框架和尝试)
答案 0 :(得分:3)
你可以在你的JFrame上使用它(抱歉它是Java,我不熟悉Jython):
frame.setMinimumSize(frame.getPreferredSize());
如果LayoutManager
的内容窗格的JFrame
强制执行最小尺寸,则您的代码可以正常工作。但是,默认情况下,您会收到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();
}
});
}
}