Расположение компонентов в JFrame с помощью менеджера компоновки GridBagLayout

Мне нужно было расположить компоненты так: в первой строчке 2 кнопки, которые занимают половину всей высоты окна, а отношение их ширины 1:2, во второй строчке все также, но отношение ширины 2:1. Для расположения компонентов я использовал GridBagLayout, т.к. посчитал его достаточно простым и гибким для верстки моего приложения, но он работает не так, как я думал.

Я написал код:

Container pane = getContentPane();
pane.setLayout(new GridBagLayout());
GridBagConstraints layout = new GridBagConstraints();

JButton openButton = new JButton(OPEN_BUTTON_TEXT);
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.33;
layout.weighty = 0.5;
layout.gridx = 0;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
pane.add(openButton, layout);

JButton saveButton = new JButton(SAVE_BUTTON_TEXT);
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.66;
layout.weighty = 0.5;
layout.gridx = 1;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
pane.add(saveButton, layout);

JButton reverseButton = new JButton(REVERSE_BUTTON_TEXT);
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.66;
layout.weighty = 0.5;
layout.gridx = 0;
layout.gridy = 1;
layout.gridwidth = 1;
layout.gridheight = 1;
pane.add(reverseButton, layout);

JButton calculateButton = new JButton("Рассчитать");
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.33;
layout.weighty = 0.5;
layout.gridx = 1;
layout.gridy = 1;
layout.gridwidth = 1;
layout.gridheight = 1;
pane.add(calculateButton, layout);

Мои ожидания: Изображение 1

Итоговый вывод: Изображение 2

Я попробовал составить ряды из JPanel и уже в них разместить кнопки, но в итоге вывод отдалился еще больше от ожиданий. Код:

Container pane = getContentPane();
pane.setLayout(new GridBagLayout());
GridBagConstraints layout = new GridBagConstraints();

JPanel panel1 = new JPanel();
panel1.setBackground(Color.BLUE);
panel1.setLayout(new GridBagLayout());
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 1;
layout.weighty = 0.5;
layout.gridx = 0;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
pane.add(panel1, layout);

JButton openButton = new JButton(OPEN_BUTTON_TEXT);
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.33;
layout.weighty = 1;
layout.gridx = 0;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
panel1.add(openButton, layout);

JButton saveButton = new JButton(SAVE_BUTTON_TEXT);
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.66;
layout.weighty = 1;
layout.gridx = 1;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
panel1.add(saveButton, layout);


JPanel panel2 = new JPanel();
panel2.setBackground(Color.GREEN);
panel1.setLayout(new GridBagLayout());
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 1;
layout.weighty = 0.5;
layout.gridx = 0;
layout.gridy = 1;
layout.gridwidth = 1;
layout.gridheight = 1;
pane.add(panel2, layout);

JButton reverseButton = new JButton(REVERSE_BUTTON_TEXT);
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.66;
layout.weighty = 1;
layout.gridx = 0;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
panel2.add(reverseButton, layout);

JButton calculateButton = new JButton("Рассчитать");
layout.fill = GridBagConstraints.BOTH;
layout.weightx = 0.33;
layout.weighty = 1;
layout.gridx = 1;
layout.gridy = 0;
layout.gridwidth = 1;
layout.gridheight = 1;
panel2.add(calculateButton, layout);

Итоговый вывод: Изображение 3

Можете подсказать как мне настроить нужное расположение компонентов


Ответы (1 шт):

Автор решения: Kirill

Я для второго JPanel не установил менеджер компоновки, т.к. перепутал названия JPanel.

Сейчас всё поправил и, вроде как, заработало. В итоге рабочий вариант - второй, в котором я использовал JPanel для каждой строчки, и уже в них для компонентов определял веса.

Т.к. JButton находятся в разных панелях, их веса не имеют влияния друг на друга.

→ Ссылка