GridBagLayout — прародитель всех диспетчеров компоновки. Его можно рассматривать как диспетчер GridLayout бе ограничений, то есть его строки и столбцы могут иметь переменный размер. Для того чтобы разместить более крупный компонент, который не помещается в одну ячейку, несколько смежных ячеек можно объединить в одну.
Многие текстовые процессоры, а также HTML, предоставляют такие же возможности при редактировании таблиц: заполнение начинается с обычной сетки, а при необходимости некоторые ее ячейки объединяются в одну. Недавно мы рассматривали диспетчер компоновки BorderLayout.
Компоненты не обязаны заполнять всю ячейку, показанное на рис.2. Оно содержит перечисленные ниже компоненты.
- Для выпадающих списка, предназначенных для выбора начертания и размера шрифта.
- Метки указанных выпадающих списков.
- Два флажка опций для выбора полужирного шрифта и курсива.
- Текстовая область для отображения строки-примера.
Рис.2. Диалоговое окно, предназначенное для выбора шрифта.
Рис.3. Сетка диалогового окна, используемая при разработке
Теперь разделим диалоговое окно на ячейки так, как показано на рис.3. Строки и столбцы не обязаны иметь одинаковый размер). Как видим, каждый флажок занимает два столбца, а текстовая область — четыре строки.
Чтобы описать эту схему в терминах диспетчера GridBagLayout, нужно выполнить ряд действий.
- Создать объект GridBagLayout. Конструктору не следует знать, сколько строк и столбцов содержит сетка. Позднее он попытается угадать эти параметры по информации, которую он получит от вас.
- Связать объект GridLayout с контейнером.
- Для каждого компонента создать объект GridBagConstraints. Этот объект будет задавать расположение компонентов.
- Добавить компонент с ограничениями с помощью следующего вызова: add(Component, constraints);
Ниже приведен соответствующий фрагмент кода. Ограничения будут рассмотрены в дальнейшим в рубрике «Java для начинающих«.
1 2 3 4 5 6 7 8 9 10 |
GridBagLayout layout = new GridBagLayout(); panel.setLayout(layout); GridBagConstraints constraints = new GridBagConstraints(); constraints.weightx = 100; constraints.weighty = 100; constraints.gridx = 0; constraints.gridy = 2; constraints.gridwidth = 2; constraints.gridheight = 1; panel.add(style, bold); |
Главная задача заключается в том, как задать состояние объекта класса GridBagConstraints.
Хотите знать все про остеохондроз? Здесь, на osteohondroz.org собрана самая полезная информация.