JTextField在Horizo​​ntalBox中变得很大

时间:2014-05-20 13:05:06

标签: java jtextfield layout-manager

请考虑这个Java代码片段:

Box buttonBox = Box.createHorizontalBox();
buttonBox.add(new JCheckBox("Select all"));
buttonBox.add(Box.createHorizontalGlue());
buttonBox.add(new JLabel("Filter: "));
buttonBox.add(new JTextField());

Box paneBox = Box.createVerticalBox();
paneBox.add(buttonBox);
paneBox.add(new JScrollPane(jList));

由于某些原因我无法获得,JTextField占据了大部分屏幕。 jList甚至不再可见。我想知道为什么以及如何解决它。

  1. 当我使用JTextField注释该行时,它看起来很好(当然除了没有JTextField)。为什么JCheckBox和JLabel不会变得非常大?单行JTextField能够占据几乎整个屏幕的目的是什么?

  2. 大多数人建议根据我的需要设置JTextField字段的大小。但是,我读到我不应该调用这些方法,但让LayoutManager来处理它。现在,阻止JTextField变得如此之大的最优雅解决方案是什么?

2 个答案:

答案 0 :(得分:1)

尝试使用setPreferredSize方法,如下所示:

textFieldName.setPreferredSize(new Dimension(x, y));

显然,输入您希望JTextField大小为

的x和y值

答案 1 :(得分:0)

你可以通过使用一个简单的JPanel()而不是一个用于horinzontal的Box来避免这个问题。只需将首选大小设置为JTextField即可。

//Box buttonBox = Box.createHorizontalBox();
JPanel buttonBox = new JPanel(); 

buttonBox.add(new JCheckBox("Select all"));
buttonBox.add(Box.createHorizontalGlue());
buttonBox.add(new JLabel("Filter: "));
JTextField jt = new JTextField();
jt.setPreferredSize(new Dimension(100,25));
buttonBox.add(jt);

修改

说明JPanel的defaut布局是FlowLayout,默认情况下从左到右放置组件并居中对齐。你仍然可以改变对齐。 例如:

 JPanel buttonBox = new JPanel(new FlowLayout(FlowLayout.LEFT));

您还可以更改每个组件之间的差距。还有一些其他布局,如BorderLayout或GridLayout / GridBagLayout。我允许您在Google上搜索有关它们的更多信息。

enter image description here

以黄色显示JPanel,红色为VerticalBox