Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Разметка Компонентов В пределах Контейнера
Создание Пользовательского менеджера по Расположению
Домашняя страница > Создание GUI С JFC/Swing > Разметка Компонентов В пределах Контейнера

Создание Пользовательского менеджера по Расположению

Прежде, чем Вы начнете создавать пользовательского менеджера по расположению, удостоверьтесь, что никакой существующий менеджер по расположению не удовлетворяет Ваши требования. В частности менеджеры по расположению такой как GridBagLayout, SpringLayout, и BoxLayout достаточно гибки, чтобы работать во многих случаях. Можно также найти менеджеров по расположению из других источников, такой как из Интернета. Наконец, можно упростить расположение, группируя компоненты в контейнеры, такие как панели.


Отметьте: Эти покрытия урока, пишущий расположение кодируют вручную, который может быть стимулирующим. Если Вы не интересуетесь изучением всех деталей управления расположением, Вы могли бы предпочесть использовать GroupLayout менеджер по расположению объединился с инструментом разработчика, чтобы разметить Ваш GUI. Один такой инструмент разработчика является IDE NetBeans. Иначе, если Вы хотите кодировать вручную и не хотите использовать GroupLayout, тогда GridBagLayout рекомендуется как следующий самый гибкий и мощный менеджер по расположению.

Если Вы интересуетесь использованием JavaFX, чтобы создать Ваш GUI, см. Работу С Разметками в JavaFX.

Чтобы создать пользовательского менеджера по расположению, следует создать class, который реализует LayoutManager интерфейс. Можно или реализовать это непосредственно, или реализовать его подынтерфейс, LayoutManager2.

Каждый менеджер по расположению должен реализовать, по крайней мере, следующие пять методов, которые требуются LayoutManager интерфейс:

void addLayoutComponent(String, Component)
Вызванный Container class add методы. Менеджеры по расположению, которые не связывают строки с их компонентами обычно, ничего не делают в этом методе.
void removeLayoutComponent(Component)
Вызванный Container методы remove и removeAll. Менеджеры по расположению переопределяют этот метод, чтобы очистить внутреннее состояние, которое они, возможно, связали с Component.
Dimension preferredLayoutSize(Container)
Вызванный Container class getPreferredSize метод, который самостоятельно вызывают под множеством обстоятельств. Этот метод должен вычислить и возвратить идеальный размер контейнера, предполагая, что компоненты, которые это содержит, будут в или выше их привилегированных размеров. Этот метод должен принять во внимание внутренние границы контейнера, которые возвращаются getInsets метод.
Dimension minimumLayoutSize(Container)
Вызванный Container getMinimumSize метод, который самостоятельно вызывают под множеством обстоятельств. Этот метод должен вычислить и возвратить минимальный размер контейнера, предполагая, что компоненты, которые это содержит, будут в или выше их минимальных размеров. Этот метод должен принять во внимание внутренние границы контейнера, которые возвращаются getInsets метод.
void layoutContainer(Container)
Призванный позиция и размер каждый из компонентов в контейнере. Менеджер по расположению layoutContainer метод фактически не тянет компоненты. Это просто вызывает один или больше каждого компонента setSize, setLocation, и setBounds методы, чтобы установить размер компонента и позицию.

Этот метод должен принять во внимание внутренние границы контейнера, которые возвращаются getInsets метод. Если приспособлено, это должно также взять ориентацию контейнера (возвращенный getComponentOrientation метод) во внимание. Невозможно предположить что preferredLayoutSize или minimumLayoutSize методы вызовут прежде layoutContainer вызывается.

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

Если Вы хотите поддерживать компонентные ограничения, максимальные размеры, или выравнивание, то Ваш менеджер по расположению должен реализовать LayoutManager2 интерфейс. Фактически, по этим причинам среди многих других, почти все современные менеджеры по расположению должны будут реализовать LayoutManager2. Тот интерфейс добавляет пять методов к требуемым LayoutManager:

Из этих методов самые важные addLayoutComponent(Component, Object) и invalidateLayout(Container). addLayoutComponent метод используется, чтобы добавить компоненты к расположению, используя указанный ограничительный объект. invalidateLayout метод используется, чтобы лишить законной силы расположение, так, чтобы, если менеджер по расположению кэшировал информацию, это было отброшено. Для получения дополнительной информации о LayoutManager2, см. LayoutManager2 Документация API.

Наконец, всякий раз, когда Вы создаете пользовательских менеджеров по расположению, следует быть осторожными в хранении ссылок на Component экземпляры, которые больше не являются дочерними элементами Container. А именно, менеджеры по расположению должны переопределить removeLayoutComponent очистить любое кэшируемое состояние, связанное с Component.

Пример Пользовательского Расположения

Пример CustomLayoutDemo использует пользовательского вызванного менеджера по расположению DiagonalLayout. Можно найти исходный код менеджера по расположению в DiagonalLayout.java. DialogLayout размечает компоненты по диагонали, слева направо, с одним компонентом на строку. Вот изображение использования CustomLayoutDemo DialogLayout размечать пять кнопок.

Снимок CustomLayoutDemo

Нажмите кнопку Launch, чтобы работать CustomLayoutDemo Сеть Java™ использования Запускается (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.

Запускает пример CustomLayoutDemo

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Как Использовать SpringLayout
Следующая страница: Обхождение без менеджера по Расположению (Абсолютное Расположение)