如何将JTextFields保存在Java Swing BoxLayout中?

时间:2010-04-25 17:48:04

标签: 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(jTextField2);
panel.add(Box.createVerticalStrut(10));
panel.add(jButton2);

... //etc.

我的问题是JTextField垂直变大。我希望它们只对单行足够高,因为这是用户可以输入的全部内容。按钮很好(它们不会垂直扩展)。

有没有办法阻止JTextField扩展?我对Swing很新,所以如果我做的一切都非常糟糕,请告诉我。

5 个答案:

答案 0 :(得分:40)

textField = new JTextField( ... );
textField.setMaximumSize( textField.getPreferredSize() );

答案 1 :(得分:29)

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

textField.setMaximumSize( 
     new Dimension(Integer.MAX_VALUE, textField.getPreferredSize().height) );

答案 2 :(得分: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());

答案 3 :(得分:0)

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

答案 4 :(得分:-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);