Как мне предотвратить расширение JTextFields в Java Swing BoxLayout? - PullRequest
20 голосов
/ 25 апреля 2010

У меня есть 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 s? Я довольно новичок в Swing, поэтому дайте мне знать, если я все делаю ужасно неправильно.

Ответы [ 5 ]

40 голосов
/ 25 апреля 2010
textField = new JTextField( ... );
textField.setMaximumSize( textField.getPreferredSize() );
29 голосов
/ 07 апреля 2011

Если вы хотите, чтобы ширина продолжала изменяться, просто установите для нее значение MAX INT. Итак ...

textField.setMaximumSize( 
     new Dimension(Integer.MAX_VALUE, textField.getPreferredSize().height) );
1 голос
/ 31 января 2013

В моем случае мне нужна комбинация всех ответов для правильной работы. Если я не использую клей, он не центрируется по вертикали; если я не ограничиваю максимальный размер, он расширяется вертикально; если я ограничу ширину и высоту, он будет слишком маленьким и достаточно широким, чтобы вместить текст инициализации.

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());
0 голосов
/ 14 ноября 2011
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);
0 голосов
/ 25 апреля 2010

установить максимальную высоту. или поместите их в область прокрутки

...