Поиск…


Синтаксис

  • frame.setLayout (новый GridBagLayout ()); // Установите GridBagLayout для кадра
  • pane.setLayout (новый GridBagLayout ()); // Установить GridBagLayout для панели
  • JPanel pane = новый JPanel (новый GridBagLayout ()); // Установить GridBagLayout для панели
  • GridBagConstraints c = new GridBagConstraints () // Инициализировать GridBagConstraint

Как работает GridBagLayout?

Макеты используются, когда вы хотите, чтобы ваши компоненты отображались не только рядом друг с другом. 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

Пример GridBagLayout



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow