Как заставить JButton заполнить его родительский BoxLayout - PullRequest
0 голосов
/ 02 мая 2018
JFrame frame = new JFrame();
frame.setSize(400, 300);
JPanel panel = new JPanel() {{
    setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
    add(new JButton("button"));
    add(new JTextField("Text"));
}};

frame.setContentPane(panel);
frame.setVisible(true);

Я хочу, чтобы JButton заполнял родительский макет, как JTextField. Так какое свойство им управляло?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Я хочу, чтобы JButton заполнял родительский макет, как JTextField. Так какое свойство им управляло?

BoxLayout учитывает «максимальный размер» компонента.

Максимальный размер кнопки равен ее «предпочтительному размеру», поэтому, если вы хотите, чтобы кнопка увеличивалась, вам необходимо переопределить метод кнопки getMaximumSize() для возврата размера, по крайней мере, размера вашего фрейма.

Или, как указано в комментариях, вы можете использовать:

  1. a GridLayout, чтобы все компоненты были одинакового размера
  2. a GridBagLayout, чтобы позволить компонентам расти по мере необходимости.

Прочтите раздел из учебника по Swing по Использование менеджеров по раскладке для получения дополнительной информации по вышеупомянутому.

0 голосов
/ 02 мая 2018

Попробуйте использовать BorderLayout для быстрого решения.

setLayout(new BorderLayout(0,0));
add(new JButton("button"),BorderLayout.WEST);
add(new JTextField("Text"),BorderLayout.CENTER);

это должно работать для вас

...