我想要做什么
在 Swing 中,我尝试使用BoxLayout
或等效的线性容器,但容器中的项目垂直拉伸。在我的应用程序中,我不希望它们垂直拉伸。
我知道我可以在组件上设置一个 preferredSize 或 maximumSize,但是下面的代码只是一个复制器,我不能硬编码或最大化组件的大小,这些组件实际上更复杂和动态。而且我不能将 aBorderLayout
与该BorderLayout.TOP
位置一起使用,因为如果我这样做,将不会显示任何滚动条。我可能需要滚动窗格。
我试过的
因此,我尝试按照Using Invisible Components as Filler中的说明使用fillers
in a ,但它不起作用。尽管在 Oracle 文档中,它似乎正是我所需要的。这是我的尝试:BoxLayout
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class TestBoxLayout implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new TestBoxLayout());
}
@Override
public void run() {
JFrame f = new JFrame("test box layout");
JPanel b = new JPanel();
b.setLayout(new BoxLayout(b, BoxLayout.PAGE_AXIS));
b.add(new JTextField("field 1"));
b.add(new JTextField("field 2"));
b.add(new JTextField("field 3"));
b.add(Box.createVerticalGlue());
f.setContentPane(b);
f.setSize(500, 200);
f.setVisible(true);
}
}
这是我得到的结果:
第二次尝试
我尝试使用Box类而不是JPanel
with BoxLayout
,但视觉结果完全相同。这是我的第二次尝试:
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class TestBox implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new TestBox());
}
@Override
public void run() {
JFrame f = new JFrame("test box");
Box b = Box.createVerticalBox();
b.add(new JTextField("field 1"));
b.add(new JTextField("field 2"));
b.add(new JTextField("field 3"));
b.add(Box.createVerticalGlue());
f.setContentPane(b);
f.setSize(500, 200);
f.setVisible(true);
}
}
我想做什么
有谁知道我如何修复这些填充物并使它们起作用?对给定代码的修复会很棒。
这是我用颜料画的一幅画,它显示了我想要的结果: