Иллюстрированный самоучитель по Java

       

Менеджер GridBagLayout


Менеджер размещения GridBagLayout расставляет компоненты наиболее гибко, позволяя задавать размеры и положение каждого компонента. Но он оказался очень сложным и применяется редко.

В классе GridBagLayout есть только один конструктор по умолчанию, без аргументов. Менеджер класса GridBagLayout, в отличие от других менеджеров размещения, не содержит правил размещения. Он играет только организующую роль. Ему передаются ссылка на компонент и правила расположения этого компонента, а сам он помещает данный компонент по указанным правилам в контейнер. Все правила размещения компонентов задаются в

Объекте другого класса, GridBagConstraints.

Менеджер размещает компоненты в таблице с неопределенным заранее числом строк и столбцов. Один компонент может занимать несколько ячеек этой таблицы, заполнять ячейку целиком, располагаться в ее центре, углу или прижиматься к краю ячейки.

Класс GridBagConstraints содержит одиннадцать полей, определяющих размеры компонентов, их положение в контейнере и взаимное положение, и несколько констанГ — значений некоторых полей. Они перечислены в табл. 11.1. Эти параметры определяются конструктором, имеющим одиннадцать аргументов. Второй конструктор — конструктор по умолчанию — присваивает параметрам значения, заданные по умолчанию.

Таблица 11.1.

Поля класса GridBagConstraints

Поле



Значение

anchor

Направление размещения компонента в контейнере. Константы:

CENTER, NORTH, EAST, NORTHEAST, SOUTHEAST, SOUTH, SOUTHWEST,

WEST, и NORTHWEST; no умолчанию CENTER

fill

Растяжение компонента для заполнения ячейки. Константы: NONE, HORIZONTAL, VERTICAL, BOTH; ПО умолчанию NONE

gridheight

Количество ячеек в колонке, занимаемых компонентом. Целое типа int, по умолчанию 1. Константа REMAINDER означает, что компонент займет остаток колонки, RELATIVE — будет следующим по порядку в колонке

gridwidth

Количество ячеек в строке, занимаемых компонентом. Целое типа int, по умолчанию 1. Константа REMAINDER означает, что компонент займет остаток строки, RELATIVE — будет следующим в строке по порядку

gridx

Номер ячейки в строке. Самая левая ячейка имеет номер 0. По умолчанию константа RELATIVE, что означает: следующая по порядку

gridy

Номер ячейки в столбце. Самая верхняя ячейка имеет номер 0. По умолчанию константа RELATIVE, что означает: следующая по порядку

insets

Поля в контейнере. Объект класса insets; по умолчанию объект с нулями

ipadx, ipady

Горизонтальные и вертикальные поля вокруг компонентов; по умолчанию 0

weightx,

weighty

Пропорциональное растяжение компонентов при изменении размера контейнера; по умолчанию 0,0

<
Как правило, объект класса GridBagConstraints создается конструктором по умолчанию, затем значения нужных полей меняются простым присваиванием новых значений, например:

GridBagConstraints gbc = new GridBagConstraints(); 

gbc.weightx = 1.0;

gbc.gridwidth = GridBagConstraints.REMAINDER; 

gbc.gridheight =2;

После создания объекта gbc класса GridBagConstraints менеджеру размещения указывается, что при помещении компонента сотр в контейнер следует применять правила, занесенные в объект gbc. Для этого применяется метод

add(Component comp, GridBagConstraints gbc)

Итак, схема применения менеджера

GridBagLayout

такова

:

GridBagLayout gbl = new GridBagLayout();     // Создаем менеджер 

setLayout(gbl);                              // Устанавливаем его в контейнер 

   

                                           // Задаем правила размещения по умолчанию 

GridBagConstraints с = new GridBagConstraints(); 

Button b2 = new Button();                    // Создаем компонент 

c.gridwidth =2;                              // Меняем правила размещения 

add(bl, с);                                  // Помещаем компонент b2 в контейнер



                                             // по указанным правилам размещения с

Button Ь2 = new Button();                    // Создаем следующий компонент 

c.gridwidth = 1;                             // Меняем правила для его размещения 

add(b2, с);                                  // Помещаем в контейнер

и т.д.

В документации к классу GridBagLayout приведен хороший пример использования этого менеджера размещения.


Содержание раздела