22

我有一个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.

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

有什么办法可以防止JTextFields 膨胀吗?我对 Swing 很陌生,所以如果我做的一切都非常错误,请告诉我。

4

5 回答 5

44
textField = new JTextField( ... );
textField.setMaximumSize( textField.getPreferredSize() );
于 2010-04-25T18:51:57.867 回答
30

如果您希望宽度不断变化,只需将其设置为 MAX INT。所以...

textField.setMaximumSize(
     新维度(Integer.MAX_VALUE, textField.getPreferredSize().height));

于 2011-04-06T22:18:46.227 回答
1

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

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());
于 2013-01-31T16:06:46.223 回答
0

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

于 2010-04-25T18:01:14.660 回答
-1
JPanel panel = new JPanel();

Box box = Box.createVerticalBox();

JTextField tf = new JTextField(8);

box.add(tf);
panel.add(box);

frame.getContentPane().add(panel, BorderLayout.CENTER);
于 2011-11-14T13:20:49.327 回答