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