|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Менеджер по расположению является объектом, который реализует LayoutManager interface* и определяет размер и позицию компонентов в пределах контейнера. Хотя компоненты могут обеспечить размер и подсказки выравнивания, менеджер по расположению контейнера имеет последнее слово на размере и позиции компонентов в пределах контейнера.
GroupLayout менеджер по расположению объединился с инструментом разработчика, чтобы разметить Ваш GUI. Один такой инструмент разработчика является IDE NetBeans. Иначе, если Вы хотите кодировать вручную и не хотите использовать GroupLayout, тогда GridBagLayout рекомендуется как следующий самый гибкий и мощный менеджер по расположению. Если Вы интересуетесь использованием JavaFX, чтобы создать Ваш GUI, см. Работу С Разметками в JavaFX.
Этот раздел обсуждает некоторые из общих задач, связанных с использованием менеджеров по расположению:
Как правило единственные контейнеры, о менеджерах по расположению которых Вы должны волноваться,
Можно установить менеджера по расположению панели, использующего 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.
Три фактора влияют на количество пространства между видимыми компонентами в контейнере:
BoxLayout. См., Как Использовать BoxLayout для примеров использования невидимых компонентов.Этот веб-сайт пишется на английском языке с текстом, который работает слева направо, и затем от начала до конца. Однако, у многих других языков есть различные ориентации. componentOrientation свойство обеспечивает способ указать, что определенный компонент должен использовать что-то другое от значения по умолчанию слева направо, ориентации от начала до конца. В компоненте, таком как переключатель, ориентация могла бы использоваться в качестве подсказки, что стиль должен переключить расположения значка и текста в кнопке. В контейнере ориентация используется в качестве подсказки менеджеру по расположению.
Чтобы установить ориентацию контейнера, можно использовать любого Component- определенный метод setComponentOrientation или, чтобы установить ориентацию на дочерних элементах контейнера также, . Параметром любому методу может быть константа такой как ComponentOrientation.RIGHT_TO_LEFT, или это может быть звонок ComponentOrientation метод . Например, следующий код вызывает все JComponents, чтобы быть инициализированным с арабоязычной локалью, и затем устанавливает ориентацию области контента и всех компонентов в этом соответственно:
JComponent.setDefaultLocale(new Locale("ar"));
JFrame frame = new JFrame();
...
Container contentPane = frame.getContentPane();
contentPane.applyComponentOrientation(
ComponentOrientation.getOrientation(
contentPane.getLocale()));
Вот два изображения, показывающие как FlowLayout размечает компоненты в контейнерах, которые являются точно тем же самым, за исключением их ориентации.

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

Справа налево ориентация
Стандартные менеджеры по расположению, которые поддерживают компонентную ориентацию, FlowLayout, BorderLayout, BoxLayout, GridBagLayout, и GridLayout.
У менеджеров по расположению есть различные достоинства и недостатки. Этот раздел обсуждает некоторые общие сценарии расположения и какие менеджеры по расположению могли бы работать на каждый сценарий. Однако, еще раз, строго рекомендуется, чтобы Вы использовали инструмент разработчика, чтобы создать Ваших менеджеров по расположению, таких как , вместо того, чтобы кодировать менеджеров вручную. Упомянутые ниже сценарии даются в информационных целях, в случае, если Вам любопытно, о котором тип менеджера используется в различных ситуациях, или в случае, если абсолютно следует кодировать своего менеджера вручную.
Если ни один из менеджеров по расположению, которых мы обсуждаем, не является правильным для Вашей ситуации, и невозможно использовать инструмент разработчика, не стесняйтесь использовать других менеджеров по расположению, которых можно записать или найти. Также имейте в виду что гибкие менеджеры по расположению такой как GridBagLayout и SpringLayout может выполнить много потребностей расположения.
GridLayout или BorderLayout. Иначе, BorderLayout или GridBagLayout могло бы быть хорошее соответствие. Если Вы используете BorderLayout, Вы должны будете поместить голодный пространства компонент в центр. С GridBagLayout, Вы должны будете установить ограничения для компонента так, чтобы fill=GridBagConstraints.BOTH. Другая возможность состоит в том, чтобы использовать BoxLayout, то, чтобы заставлять голодный пространства компонент определить очень большие привилегированные и максимальные размеры.
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, таким образом, любой современный менеджер по расположению должен будет реализовать это.