web-dev-qa-db-ja.com

Java Swing BoxLayoutのJTextFieldsが拡張しないようにするにはどうすればよいですか?

次のような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が垂直方向に巨大になることです。ユーザーが入力できるのはそれだけなので、1行に十分な高さにしたいボタンは問題ありません(垂直方向には展開しません)。

JTextFieldsが拡大しないようにする方法はありますか?私はSwingにかなり慣れていないので、すべてがひどく間違っているかどうかを知らせてください。

21
Matthew
textField = new JTextField( ... );
textField.setMaximumSize( textField.getPreferredSize() );
41
camickr

幅を変更し続ける場合は、MAXINTに設定したままにします。そう...

 textField.setMaximumSize(
 new Dimension(Integer.MAX_VALUE、textField.getPreferredSize()。height));
29
cbrown

私の場合、それが正しく機能するためには、すべての答えの組み合わせが必要です。接着剤を使用しない場合、垂直方向の中央に配置されません。最大サイズを制限しない場合、垂直方向に伸びます。幅と高さの両方を制限すると、小さすぎて、初期化テキストを含めるのに十分な幅しかありません。

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());
1
damix911

最大高さを設定します。またはそれらをスクロール領域に配置します

0
Randy