Как заставить JButton заполнять его родительский BoxLayout

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. Так какая собственность контролировала это?

Используйте GridLayout или, если вы предпочитаете что-то, что будет по-прежнему соответствовать ширине кнопки, GridBagLayout

MadProgrammer 02.05.2018 10:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

Ответ принят как подходящий

I want to make JButton fill parent layout like JTextField. So what property controlled it?

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

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

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

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

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

Другие вопросы по теме