Ответ 1
textField = new JTextField( ... );
textField.setMaximumSize( textField.getPreferredSize() );
У меня есть 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, поэтому дайте мне знать, если я делаю все ужасно неправильно.
textField = new JTextField( ... );
textField.setMaximumSize( textField.getPreferredSize() );
Если вы хотите, чтобы ширина сохранялась, просто установите ее в MAX INT. Итак...
textField.setMaximumSize( new Dimension(Integer.MAX_VALUE, 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());
установите максимальную высоту. или поместить их в область прокрутки
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);