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

Используя Высокоуровневые Контейнеры

Как мы упоминали прежде, Swing обеспечивает три обычно полезных высокоуровневых контейнерных класса: JFrame, JDialog, и JApplet. При использовании этих классов следует помнить эти факты:


Отметьте: Хотя JInternalFrame подражает JFrame, внутренние рамки не являются фактически высокоуровневыми контейнерами.

Вот изображение фрейма, создаваемого приложением. Фрейм содержит зеленую строку меню (без меню) и, в области контента фрейма, большом пробеле, желтой метке.

Простое приложение с фреймом, который содержит строку меню и область контента.
Схема главных частей фрейма

Можно найти весь источник для этого примера в TopLevelDemo.java. Хотя пример использует a JFrame в автономном приложении применяются к те же самые понятия JApplets и JDialogs.

Вот иерархия включения для GUI этого примера:

Иерархия включения для GUI TopLeveDemo в качестве примера.

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

Высокоуровневые Контейнеры и Иерархии Включения

У каждой программы, которая использует компоненты Swing, есть по крайней мере один высокоуровневый контейнер. Этот высокоуровневый контейнер является корнем иерархии включения — иерархия, которая содержит все компоненты Swing, которые появляются в высокоуровневом контейнере.

Как правило у автономного приложения с основанным на Swing GUI есть по крайней мере одна иерархия включения с a JFrame как его корень. Например, если у приложения есть одно главное окно и два диалоговых окна, то у приложения есть три иерархии включения, и таким образом три высокоуровневых контейнера. У одной иерархии включения есть a JFrame как его корень, и каждый из других двух имеет a JDialog возразите как его корень.

У основанного на Swing апплета есть по крайней мере одна иерархия включения, точно один из которых базируется a JApplet объект. Например, у апплета, который переводит диалоговое окно в рабочее состояние, есть две иерархии включения. Компоненты в окне браузера находятся в иерархии включения, базированной a JApplet объект. У диалогового окна есть иерархия включения, базированная a JDialog объект.

Добавление Компонентов к Области Контента

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

frame.getContentPane().add(yellowLabel, BorderLayout.CENTER);

Поскольку код показывает, Вы находите область контента высокоуровневого контейнера, вызывая getContentPane метод. Область контента значения по умолчанию является простым промежуточным контейнером, который наследовался от JComponent, и это использует a BorderLayout как его менеджер по расположению.

Легко настроить область контента — установка менеджера по расположению или добавление границы, например. Однако, есть один крошечный глюк. getContentPane метод возвращает a Container объект, не a JComponent объект. Это означает это, если Вы хотите использовать в своих интересах область контента JComponent функции, Вы должны или преобразовать тип возвращаемого значения или создать Ваш собственный компонент, чтобы быть областью контента. Наши примеры обычно проявляют второй подход, так как это немного уборщик. Другой подход мы иногда взятие должен просто добавить специализированный компонент к области контента, покрывая область контента полностью.

Отметьте что менеджер по расположению значения по умолчанию по JPanel FlowLayout; Вы будете, вероятно, хотеть изменить это.

Чтобы сделать компонент областью контента, используйте высокоуровневый контейнер setContentPane метод. Например:

//Create a panel and add components to it.
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(someBorder);
contentPane.add(someComponent, BorderLayout.CENTER);
contentPane.add(anotherComponent, BorderLayout.PAGE_END);


topLevelContainer.setContentPane(contentPane);

Отметьте: 

Как удобство, add метод и его разновидности, remove и setLayout были переопределены, чтобы передать contentPane по мере необходимости. Это означает, что можно записать

frame.add(child);

и дочерний элемент будет добавлен к contentPane.

Отметьте, что только эти три метода делают это. Это означает это getLayout() не будет возвращать набор расположения с setLayout().


Добавление Строки меню

В теории все высокоуровневые контейнеры могут содержать строку меню. Практически, однако, строки меню обычно появляются только во фреймах и апплетах. Чтобы добавить строку меню к высокоуровневому контейнеру, создайте a JMenuBar возразите, заполните это с меню, и затем вызовите setJMenuBar. TopLevelDemo добавляет строка меню к ее фрейму с этим кодом:

frame.setJMenuBar(greenMenuBar);

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

Корневая Область

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

Вот список компонентов, которые корневая область обеспечивает для фрейма (и для любого высокоуровневого контейнера):

Корневая область управляет четырьмя другими областями: многоуровневая область, строка меню, область контента, и стеклянная область.

Мы уже сказали Вам об области контента и дополнительной строке меню. Два других компонента, которые добавляет корневая область, являются многоуровневой областью и стеклянной областью. Многоуровневая область содержит строку меню и область контента, и включает Z-упорядочиванию других компонентов. Стеклянная область часто используется, чтобы прервать входные события, происходящие по высокоуровневому контейнеру, и может также использоваться, чтобы нарисовать по многократным компонентам.

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

All top-level containers can, in theory, have a menu bar. In practice, however, menu bars usually appear only in frames and perhaps in applets. To add a menu bar to a top-level container, you create a JMenuBar object, populate it with menus, and then call setJMenuBar. The TopLevelDemo adds a menu bar to its frame with this code:

frame.setJMenuBar(greenMenuBar);
For more information about implementing menus and menu bars, see How to Use Menus.

The Root Pane

Each top-level container relies on a reclusive intermediate container called the root pane. The root pane manages the content pane and the menu bar, along with a couple of other containers. You generally don't need to know about root panes to use Swing components. However, if you ever need to intercept mouse clicks or paint over multiple components, you should get acquainted with root panes.

Here's a glimpse at the components that a root pane provides to a frame (and to every other top-level container):

A root pane manages four other panes: a layered pane, a menu bar, a content pane, and a glass pane.
We've already told you about the content pane and the optional menu bar. The two other components that a root pane adds are a layered pane and a glass pane. The layered pane directly contains the menu bar and content pane, and enables Z-ordering of other components you might add. The glass pane is often used to intercept input events occuring over the top-level container, and can also be used to paint over multiple components.

For more information about the intricacies of root panes, see How to Use Root Panes.

-->


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

Предыдущая страница: Используя Компоненты Swing
Следующая страница: Класс JComponent