gpt4 book ai didi

java - Swing BoxLayout 问题 - 无法让填充物完成它们的工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:33:09 25 4
gpt4 key购买 nike

我想做什么

在 Swing 中,我尝试使用 BoxLayout 或等效的线性容器,但容器中的项目垂直拉伸(stretch)。在我的应用程序中,我不希望它们垂直拉伸(stretch)。

我知道我可以在组件上设置 preferredSize 或 maximumSize,但下面的代码只是一个复制器,我不能硬编码或最大化组件的大小,它们实际上更复杂并且 动态。而且我不能将 BorderLayoutBorderLayout.TOP 位置一起使用,因为如果我这样做,滚动条将永远不会显示。我可能需要滚动 Pane 。


我尝试过的

所以我尝试在 BoxLayout 中使用 fillers,如 Using Invisible Components as Filler 中所述。 ,但它就是行不通。虽然在 Oracle 文档中,它似乎正是我所需要的。这是我的尝试:

    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);
}

}

这是我得到的结果:

Fillers are not working


第二次尝试

我尝试使用 Box类而不是 JPanelBoxLayout,但视觉效果是完全一样的。这是我的第二次尝试:

    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);
}

}

我想做什么

有谁知道如何修复这些填充物并使它们起作用?对给定代码的修复会很棒。

这是我用颜料画的图,显示了我想要的结果: Expected result

最佳答案

BoxLayout 非常适合您要执行的操作。作为最后一个组件的胶水插件很好。为什么不简单地在 JTextFields 上使用 setMaximumSize 方法?我不确定仅 JTextFields 就能满足您的需求。如果使用 setMaximumSize 不起作用,请将每个 JTextField 放入 JPanel 中,然后在每个 JPanel 上使用 setMaximumSize。

关于java - Swing BoxLayout 问题 - 无法让填充物完成它们的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6521113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com