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

Используя менеджеров по Расположению

Менеджер по расположению является объектом, который реализует LayoutManager interface* и определяет размер и позицию компонентов в пределах контейнера. Хотя компоненты могут обеспечить размер и подсказки выравнивания, менеджер по расположению контейнера имеет последнее слово на размере и позиции компонентов в пределах контейнера.


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

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

Этот раздел обсуждает некоторые из общих задач, связанных с использованием менеджеров по расположению:

Установка менеджера по Расположению

Как правило единственные контейнеры, о менеджерах по расположению которых Вы должны волноваться, JPanels и области контента. Каждый JPanel объект инициализируется, чтобы использовать a FlowLayout, если Вы не определяете по-другому, создавая JPanel. Контент разделяет использование на области BorderLayout по умолчанию. Если Вам не нравится менеджер по расположению значения по умолчанию, что панель или контент разделяют использование на области, Вы свободны изменить это на различный. Однако, если Вы не используете JToolBar, FlowLayout и BorderLayout менеджеры только полезны для анализа прототипа. Любое реальное приложение должно будет сбросить менеджера по расположению. Снова, следует использовать соответствующий инструмент, чтобы сделать это, вместо того, чтобы кодировать менеджера вручную.

Можно установить менеджера по расположению панели, использующего JPanel конструктор. Например:

JPanel panel = new JPanel(new BorderLayout());

После того, как контейнер был создан, можно установить его менеджера по расположению, использующего setLayout метод. Например:

Container contentPane = frame.getContentPane();
contentPane.setLayout(new FlowLayout());

Хотя мы строго рекомендуем, чтобы Вы использовали менеджеров по расположению, можно выполнить расположение без них. Устанавливая свойство расположения контейнера в NULL, Вы не делаете контейнерное использование никаким менеджером по расположению. С этой стратегией, названной абсолютным расположением, следует определить размер и позицию каждого компонента в пределах того контейнера. Один недостаток абсолютного расположения - то, что оно не корректируется хорошо, когда высокоуровневый контейнер изменяется. Это также не корректируется хорошо к различиям между пользователями и системами, такими как различные размеры шрифта и локали.

Добавление Компонентов к Контейнеру

Когда Вы добавляете компоненты к панели или области контента, параметры, Вы определяете к add метод зависит от менеджера по расположению, которого использует область панели или контента. Фактически, некоторые менеджеры по расположению даже не требуют, чтобы Вы добавили компонент явно; например, GroupLayout. Например, BorderLayout требует, чтобы Вы определили область, к которой должен быть добавлен компонент (использование одной из констант, определенных в BorderLayout) использование кода как это:

pane.add(aComponent, BorderLayout.PAGE_START);

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

Контейнеры Swing кроме JPanel и области контента обычно обеспечивают API, который следует использовать вместо add метод. Например, вместо того, чтобы добавить компонент непосредственно к области прокрутки (или, фактически, к ее области просмотра), Вы любой определяет компонент в JScrollPane конструктор или использование setViewportView. Из-за специализированного API как это Вы не должны знать, какого менеджера по расположению (если кто-либо) много контейнеров Swing используют. (Для любопытного: области прокрутки, оказывается, используют названного менеджера по расположению ScrollPaneLayout.)

Для получения информации о том, как добавить компоненты к определенному контейнеру, см. страницу с практическими рекомендациями для контейнера. Можно счесть компонент использованием страниц с практическими рекомендациями, Как Использовать Различные Компоненты.

Обеспечение Подсказок Размера и Выравнивания

Иногда Вы должны настроить подсказки размера, что компонент обеспечивает для менеджера по расположению его контейнера, так, чтобы компонент был размечен хорошо. Можно сделать это, определяя один или больше минимума, предпочтенных, и максимальных размеров компонента. Можно вызвать методы компонента для того, чтобы установить подсказки размера — setMinimumSize, setPreferredSize, и setMaximumSize. Или можно создать подкласс компонента, который переопределяет соответствующие методы метода get — getMinimumSize, getPreferredSize, и getMaximumSize. Вот пример создания максимального неограниченного размера компонента:

component.setMaximumSize(new Dimension(Integer.MAX_VALUE,
                                       Integer.MAX_VALUE));

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

Помимо обеспечения подсказок размера, можно также обеспечить подсказки выравнивания. Например, можно определить, что главные края двух компонентов должны быть выровненные. Вы устанавливаете подсказки выравнивания любой, вызывая компонент setAlignmentX и setAlignmentY методы, или переопределяя компонент getAlignmentX и getAlignmentY методы. Хотя большинство менеджеров по расположению игнорирует подсказки выравнивания, BoxLayout соблюдает их. Можно найти примеры установки выравнивания в том, Как Использовать BoxLayout.

Помещение Пространства Между Компонентами

Три фактора влияют на количество пространства между видимыми компонентами в контейнере:

Менеджер по расположению
Некоторые менеджеры по расположению автоматически помещают пространство между компонентами; другие не делают. Некоторые позволяют Вам определять количество пространства между компонентами. См. страницу с практическими рекомендациями для каждого менеджера по расположению по информации об интервале поддержки.
Невидимые компоненты
Можно создать легкие компоненты, которые не выполняют рисования, но это может занять место в GUI. Часто, Вы используете невидимые компоненты в контейнерах, которыми управляют BoxLayout. См., Как Использовать BoxLayout для примеров использования невидимых компонентов.
Пустые границы
Независимо от того, что менеджер по расположению, можно влиять на очевидное количество пространства между компонентами, добавляя пустые границы к компонентам. Лучшие кандидаты на пустые границы являются компонентами, у которых обычно нет никакой границы значения по умолчанию, такой как панели и метки. Некоторые другие компоненты не могли бы работать хорошо с границами в некоторых реализациях стили из-за способа, которым реализуется их код рисования. Для получения информации о границах см., Как Использовать Границы.

Установка Ориентации Контейнера

Этот веб-сайт пишется на английском языке с текстом, который работает слева направо, и затем от начала до конца. Однако, у многих других языков есть различные ориентации. componentOrientation свойство обеспечивает способ указать, что определенный компонент должен использовать что-то другое от значения по умолчанию слева направо, ориентации от начала до конца. В компоненте, таком как переключатель, ориентация могла бы использоваться в качестве подсказки, что стиль должен переключить расположения значка и текста в кнопке. В контейнере ориентация используется в качестве подсказки менеджеру по расположению.

Чтобы установить ориентацию контейнера, можно использовать любого Component- определенный метод setComponentOrientation или, чтобы установить ориентацию на дочерних элементах контейнера также, applyComponentOrientation. Параметром любому методу может быть константа такой как ComponentOrientation.RIGHT_TO_LEFT, или это может быть звонок ComponentOrientation метод getOrientation(Locale). Например, следующий код вызывает все JComponents, чтобы быть инициализированным с арабоязычной локалью, и затем устанавливает ориентацию области контента и всех компонентов в этом соответственно:

JComponent.setDefaultLocale(new Locale("ar"));
JFrame frame = new JFrame();
...
Container contentPane = frame.getContentPane();
contentPane.applyComponentOrientation(
    ComponentOrientation.getOrientation(
        contentPane.getLocale()));

Вот два изображения, показывающие как FlowLayout размечает компоненты в контейнерах, которые являются точно тем же самым, за исключением их ориентации.

FlowLayoutDemo со значением по умолчанию, слева направо ориентация
Ориентация значения по умолчанию (слева направо)

FlowLayoutDemo со справа налево ориентацией
Справа налево ориентация

Стандартные менеджеры по расположению, которые поддерживают компонентную ориентацию, FlowLayout, BorderLayout, BoxLayout, GridBagLayout, и GridLayout.


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

Подсказки относительно Выбора менеджера по Расположению

У менеджеров по расположению есть различные достоинства и недостатки. Этот раздел обсуждает некоторые общие сценарии расположения и какие менеджеры по расположению могли бы работать на каждый сценарий. Однако, еще раз, строго рекомендуется, чтобы Вы использовали инструмент разработчика, чтобы создать Ваших менеджеров по расположению, таких как IDE NetBeans разработчик GUI Матисса, вместо того, чтобы кодировать менеджеров вручную. Упомянутые ниже сценарии даются в информационных целях, в случае, если Вам любопытно, о котором тип менеджера используется в различных ситуациях, или в случае, если абсолютно следует кодировать своего менеджера вручную.

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

Сценарий: Вы должны вывести на экран компонент в таком большом количестве пространства, как это может добраться.
Если это - единственный компонент в своем контейнере, использовать GridLayout или BorderLayout. Иначе, BorderLayout или GridBagLayout могло бы быть хорошее соответствие.

Если Вы используете BorderLayout, Вы должны будете поместить голодный пространства компонент в центр. С GridBagLayout, Вы должны будете установить ограничения для компонента так, чтобы fill=GridBagConstraints.BOTH. Другая возможность состоит в том, чтобы использовать BoxLayout, то, чтобы заставлять голодный пространства компонент определить очень большие привилегированные и максимальные размеры.

Сценарий: Вы должны вывести на экран несколько компонентов в компактной строке в их естественном размере.
Рассмотрите использование a JPanel сгруппировать компоненты и использующий любого JPanel's значение по умолчанию FlowLayout менеджер или BoxLayout менеджер. SpringLayout также хорошо для этого.
Сценарий: Вы должны вывести на экран несколько компонентов того же самого размера в строках и столбцах.
GridLayout совершенно для этого.
Сценарий: Вы должны вывести на экран несколько компонентов подряд или столбца, возможно с переменным количеством пространства между ними, пользовательским выравниванием, или пользовательскими компонентными размерами.
BoxLayout совершенно для этого.
Сценарий: Вы должны вывести на экран выровненные столбцы, как в подобном форме интерфейсе, где столбец меток используется, чтобы описать текстовые поля в смежном столбце.
SpringLayout естественный выбор для этого. SpringUtilities class, используемый несколькими Учебными примерами, определяет a makeCompactGrid метод, который позволяет Вам легко выравнивать многократные строки и столбцы компонентов.
Сценарий: у Вас есть сложное форматирование со многими компонентами.
Считайте любое использование очень гибкого менеджера по расположению таким как GridBagLayout или SpringLayout, или группировка компонентов в один или больше JPanels, чтобы упростить расположение. Если Вы проявляете последний подход, каждого JPanel мог бы использовать различного менеджера по расположению.

Сторонние менеджеры по Расположению

Другие сторонние менеджеры по расположению были созданы сообществом Swing, чтобы дополнить обеспеченных платформой Java. Следующий список ни в коем случае не является категоричным, но упомянутые ниже менеджеры по расположению являются самыми популярными:


*Way назад в JDK 1.1 второй интерфейс, LayoutManager2, был представлен. LayoutManager2 расширяется LayoutManager, оказывание поддержки для максимального размера и выравнивания. LayoutManager2 также добавляет методы addLayoutComponent, это берет Object, и invalidateLayout. Менеджеры по расположению также нуждаются в уведомлениях, обеспеченных LayoutManager2, таким образом, любой современный менеджер по расположению должен будет реализовать это.


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

Предыдущая страница: Визуальное Руководство по менеджерам по Расположению
Следующая страница: Как Работы управления Расположением