- •Лабораторная работа 3
- •Краткие теоретические сведения
- •Компоненты Java
- •Элементы управления
- •Флажки (или переключатели)
- •Комбобокс (или выпадающие списки)
- •Полосы прокрутки
- •Текстовые компоненты
- •Контейнеры
- •Рамки, фреймы
- •Обработка событий фрейма в Java 1.1
- •Контекстные меню
- •Диалоги
- •Файловые диалоги
- •Менеджеры размещения компонентов
- •Типы менеджеров размещения
- •Выбор менеджера размещения
Выбор менеджера размещения
Рассмотрим краткие формулировки основных рекомендаций по применению каждого из рассмотренных менеджеров.
Что необходимо? |
Что использовать? |
Быстро разместить все компоненты, не обращая внимания на совершенство композиции |
FlowLayout |
Быстро и по возможности красиво расположить все компоненты |
BorderLayout |
Разместить компоненты, имеющие одинаковый размер |
GridLayout |
Разместить компоненты, некоторые из которых имеют одинаковый размер |
Рекомендуется использовать GridLayout в отдельной панели, собрав в нее компоненты, имеющие одинаковый размер, а все остальные компоненты вынести за пределы этой панели |
Выводить компоненты на экран по мере необходимости |
CardLayout |
отображать некоторые компоненты постоянно, а некоторые - по мере необходимости |
Рекомендуется использовать CardLayout в панели, предназначенной для вывода компонентов по мере необходимости, а постоянно отображаемые компоненты вынести за пределы этой панели. |
Иметь как можно больше контроля над расположением компонентов, а также обеспечить разумную реакцию на изменение размеров контейнера |
GridBagLayout |
При использовании в контейнере нескольких панелей вполне можно установить для каждой панели свой менеджер размещения, отличающийся от менеджеров соседних панелей и менеджера всего контейнера. Например, если в большой панели используется GridBagLayout, то для вложенной в нее панели меньших размеров вполне можно выбрать CardLayout.
Когда создается новый контейнер, ему присваивается менеджер размещения по умолчанию. Чтобы изменить менеджер размещения, действующий в данном контейнере, используется выражение типа
setLayout(new BorderLayout());
Если в контейнере имеется несколько вложенных компонент-контейнеров, то при задании менеджеров размещения для них нужно указать, в каком контейнере он будет действовать, например:
inputPanel.setLayout(new BorderLayout());
Добавление компонентов к контейнеру, для которого установлен отличающийся от стандартного менеджер размещения, имеет только одно отличие от обычного способа, а именно - может понадобиться передавать методу add() контейнера какие-то параметры расположения, например:
leftPanel.add("North",radioField);
При использовании менеджера GridBagLayout параметры передаются в объекте специального класса GridBagConstraints, с помощью которого можно установить для каждого компонента значения определенных параметров расположения.
Как правило, компоненты добавляются один за другим в пределах одного горизонтального ряда, пока в этом ряду остается свободное место; следующий добавляемый компонент начинает следующий ряд. Этому правилу в каком-то смысле подчиняется даже BorderLayout - когда добавляется несколько компонентов с одним и тем же параметром расположения (например, "North"), они размещаются в своей части контейнера по тому же закону.