Расположение компонентов в 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 шт):
Я для второго JPanel
не установил менеджер компоновки, т.к. перепутал названия JPanel
.
Сейчас всё поправил и, вроде как, заработало. В итоге рабочий вариант - второй, в котором я использовал JPanel
для каждой строчки, и уже в них для компонентов определял веса.
Т.к. JButton
находятся в разных панелях, их веса не имеют влияния друг на друга.