Spec-Zone .ru
спецификации, руководства, описания, API
|
Менеджер по расположению является объектом, который реализует LayoutManager
interface* и определяет размер и позицию компонентов в пределах контейнера. Хотя компоненты могут обеспечить размер и подсказки выравнивания, менеджер по расположению контейнера имеет последнее слово на размере и позиции компонентов в пределах контейнера.
GroupLayout
менеджер по расположению объединился с инструментом разработчика, чтобы разметить Ваш GUI. Один такой инструмент разработчика является IDE NetBeans. Иначе, если Вы хотите кодировать вручную и не хотите использовать GroupLayout
, тогда GridBagLayout
рекомендуется как следующий самый гибкий и мощный менеджер по расположению. Если Вы интересуетесь использованием JavaFX, чтобы создать Ваш GUI, см. Работу С Разметками в JavaFX.
Этот раздел обсуждает некоторые из общих задач, связанных с использованием менеджеров по расположению:
Как правило единственные контейнеры, о менеджерах по расположению которых Вы должны волноваться, JPanel
s и области контента. Каждый 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.
Три фактора влияют на количество пространства между видимыми компонентами в контейнере:
BoxLayout
. См., Как Использовать BoxLayout для примеров использования невидимых компонентов.Этот веб-сайт пишется на английском языке с текстом, который работает слева направо, и затем от начала до конца. Однако, у многих других языков есть различные ориентации. componentOrientation
свойство обеспечивает способ указать, что определенный компонент должен использовать что-то другое от значения по умолчанию слева направо, ориентации от начала до конца. В компоненте, таком как переключатель, ориентация могла бы использоваться в качестве подсказки, что стиль должен переключить расположения значка и текста в кнопке. В контейнере ориентация используется в качестве подсказки менеджеру по расположению.
Чтобы установить ориентацию контейнера, можно использовать любого Component
- определенный метод setComponentOrientation
или, чтобы установить ориентацию на дочерних элементах контейнера также, applyComponentOrientation
ComponentOrientation.RIGHT_TO_LEFT
, или это может быть звонок ComponentOrientation
метод getOrientation(Locale)
JComponent
s, чтобы быть инициализированным с арабоязычной локалью, и затем устанавливает ориентацию области контента и всех компонентов в этом соответственно:
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
, или группировка компонентов в один или больше JPanel
s, чтобы упростить расположение. Если Вы проявляете последний подход, каждого JPanel
мог бы использовать различного менеджера по расположению.Другие сторонние менеджеры по расположению были созданы сообществом Swing, чтобы дополнить обеспеченных платформой Java. Следующий список ни в коем случае не является категоричным, но упомянутые ниже менеджеры по расположению являются самыми популярными:
*Way назад в JDK 1.1 второй интерфейс, LayoutManager2
, был представлен. LayoutManager2
расширяется LayoutManager
, оказывание поддержки для максимального размера и выравнивания. LayoutManager2
также добавляет методы addLayoutComponent
, это берет Object
, и invalidateLayout
. Менеджеры по расположению также нуждаются в уведомлениях, обеспеченных LayoutManager2
, таким образом, любой современный менеджер по расположению должен будет реализовать это.