swing
Макет GridBag
Поиск…
Синтаксис
- frame.setLayout (новый GridBagLayout ()); // Установите GridBagLayout для кадра
- pane.setLayout (новый GridBagLayout ()); // Установить GridBagLayout для панели
- JPanel pane = новый JPanel (новый GridBagLayout ()); // Установить GridBagLayout для панели
- GridBagConstraints c = new GridBagConstraints () // Инициализировать GridBagConstraint
Как работает GridBagLayout?
Макеты используются, когда вы хотите, чтобы ваши компоненты отображались не только рядом друг с другом. GridBagLayout
полезен, поскольку он делит ваше окно на строки и столбцы, и вы решаете, в какую строку и столбец вставлять компоненты, а также сколько строк и колонок большой компонент.
Возьмем это окно в качестве примера. Для отображения макета выделены линии сетки.
Здесь я создал 6 компонентов, выложенных с помощью GridBagLayout.
Составная часть | Позиция | Размер |
---|---|---|
JLabel : «My Amazing Swing Application» | 0, 0 | 3, 1 |
JButton : "Button A" | 0, 1 | 1, 1 |
JButton : «Кнопка B» | 1, 1 | 1, 1 |
JButton : «Кнопка C» | 2, 1 | 1, 1 |
JSlider | 0, 2 | 3, 1 |
JScrollBar | 0, 3 | 3, 1 |
Обратите внимание, что позиция 0, 0
находится в левом верхнем углу: значения x
(столбец) увеличиваются слева направо, значения y
(row) возрастают сверху вниз.
Чтобы начать компоновку компонентов в GridBagLayout
, сначала установите макет вашей панели JFrame
или содержимого.
frame.setLayout(new GridBagLayout());
//OR
pane.setLayout(new GridBagLayout());
//OR
JPanel pane = new JPanel(new GridBagLayout()); //Add the layout when creating your content pane
Обратите внимание, что вы никогда не определяете размер сетки. Это делается автоматически при добавлении ваших компонентов.
После этого вам нужно будет создать объект GridBagConstraints
.
GridBagConstraints c = new GridBagConstraints();
Чтобы убедиться, что ваши компоненты заполняют размер окна, вы можете установить вес всех компонентов в 1. Вес используется для определения того, как распределять пространство между столбцами и строками.
c.weightx = 1;
c.weighty = 1;
Еще одна вещь, которую вы, возможно, захотите сделать, - убедиться, что компоненты занимают столько горизонтального пространства, сколько могут.
c.fill = GridBagConstraints.HORIZONTAL;
Вы также можете установить другие параметры заполнения, если хотите.
GridBagConstraints.NONE //Don't fill components at all
GridBagConstraints.HORIZONTAL //Fill components horizontally
GridBagConstraints.VERTICAL //Fill components vertically
GridBagConstraints.BOTH //Fill components horizontally and vertically
При создании компонентов вы захотите установить, где на сетке он должен идти, и сколько плиток сетки он должен использовать. Например, чтобы поместить кнопку в 3-й строке во втором столбце и заняться пространством 5 × 5, сделайте следующее. Имейте в виду, что сетка начинается с 0, 0
, а не 1, 1
.
JButton button = new JButton("Fancy Button!");
c.gridx = 2;
c.gridy = 1;
c.gridwidth = 5;
c.gridheight = 5;
pane.add(buttonA, c);
При добавлении компонентов в окно не забудьте передать ограничения в качестве параметра. Это можно увидеть в последней строке в приведенном выше примере кода.
Вы можете повторно использовать одни и те же GridBagConstraints
для каждого компонента, изменив его после добавления компонента, не изменив ранее добавленный компонент.
пример
Вот код для примера в начале этого раздела.
JFrame frame = new JFrame("Super Awesome Window Title!"); //Create the JFrame and give it a title
frame.setSize(512, 256); //512 x 256px size
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed
JPanel pane = new JPanel(new GridBagLayout()); //Create a pane to house all content, and give it a GridBagLayout
frame.setContentPane(pane);
GridBagConstraints c = new GridBagConstraints();
c.weightx = 1;
c.weighty = 1;
c.fill = GridBagConstraints.HORIZONTAL;
JLabel headerLabel = new JLabel("My Amazing Swing Application");
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 0;
pane.add(headerLabel, c);
JButton buttonA = new JButton("Button A");
c.gridx = 0;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonA, c);
JButton buttonB = new JButton("Button B");
c.gridx = 1;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonB, c);
JButton buttonC = new JButton("Button C");
c.gridx = 2;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonC, c);
JSlider slider = new JSlider(0, 100);
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 2;
pane.add(slider, c);
JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL, 20, 20, 0, 100);
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 3;
pane.add(scrollBar, c);
frame.setVisible(true); //Show the window