如何防止Java Swing BoxLayout中的JTextFields扩展?

如何防止Java Swing BoxLayout中的JTextFields扩展?,java,swing,layout,layout-manager,Java,Swing,Layout,Layout Manager,我有一个JPanel,看起来像这样: JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); ... panel.add(jTextField1); panel.add(Box.createVerticalStrut(10)); panel.add(jButton1); panel.add(Box.createVerticalStrut(30)); panel.add(jT

我有一个
JPanel
,看起来像这样:

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

...

panel.add(jTextField1);
panel.add(Box.createVerticalStrut(10));
panel.add(jButton1);

panel.add(Box.createVerticalStrut(30));

panel.add(jTextField2);
panel.add(Box.createVerticalStrut(10));
panel.add(jButton2);

... //etc.
我的问题是
JTextField
s在垂直方向上变得巨大。我希望它们只能高到一行,因为这是用户可以输入的全部内容。按钮很好(它们不会垂直展开)

有没有办法防止
JTextField
s扩展?我对荡秋千还很陌生,所以如果我做的每件事都很糟糕,请告诉我。

设置最大高度。
或者将它们放在滚动区域中

如果希望宽度不断变化,只需将其设置为最大整数即可。因此

textField = new JTextField( ... );
textField.setMaximumSize( textField.getPreferredSize() );
textField.setMaximumSize( new Dimension(Integer.MAX_VALUE, textField.getPreferredSize().height) ); textField.setMaximumSize(
新维度(Integer.MAX_值,textField.getPreferredSize().height))

在我的情况下,我需要所有答案的组合才能正常工作。如果我不使用胶水,它不会垂直居中;如果我不限制最大尺寸,它会垂直延伸;如果我同时限制宽度和高度,则它太小,宽度仅足以包含初始化文本

textField = new JTextField("Hello, world!");
textField.setMaximumSize(
    new Dimension(Integer.MAX_VALUE,
    textField.getPreferredSize().height));
Box box = Box.createVerticalBox();
box.add(Box.createVerticalGlue());
box.add(textField);
box.add(Box.createVerticalGlue());

谢谢,兰迪,这真的是最好的方法吗?看起来根据用户的字体大小,高度应该有所不同。还是Swing不尊重系统字体?此外,我似乎找不到一种方法来设置最大高度,而不设置宽度(我想保持自动)。我能找到的最接近的东西是
setMaximumSize
,它将
维度
(宽度和高度)作为参数。看来一定有更好的方法。这和布局管理器有关。boxlayout vs gridlayout vs我最喜欢的borderlayout。你应该研究所有这些文件的行为——你可能会找到一个你喜欢的文件。这使得我的文本字段在水平方向上很小(同时垂直排序问题)。我现在已经对它进行了排序(实际上我在没有意识到他们已经发布了它的情况下重新创建了它)@richardingle
这使得我的文本字段在水平方向上变得很小
——可能是因为您在创建文本字段时没有指定文本或列数。这就是参数中“…”的作用,通常用于空文本字段,您可以使用类似于
“new JTextField(10)”
的代码。现在你将有一个合理的宽度和高度。
textField = new JTextField("Hello, world!");
textField.setMaximumSize(
    new Dimension(Integer.MAX_VALUE,
    textField.getPreferredSize().height));
Box box = Box.createVerticalBox();
box.add(Box.createVerticalGlue());
box.add(textField);
box.add(Box.createVerticalGlue());