Тема 7.3 Контейнер и компоненты
В состав графического пользовательского интерфейса, созданного средствами Swing, входят элементы двух типов: компоненты и контейнеры. Такое разделение во многом условно, так как контейнеры являются в то же время и компонентами. Различие между ними в их назначении. Компоненты –это независимые элементы, в качестве примеров которых можно привести кнопки или линейные регуляторы. Контейнер может содержать в себе несколько компонентов и представляет собой специальный тип компонента. Чтобы компонент отобразился на экране, его надо поместить в контейнер. Таким образом, в составе графического пользовательского интерфейса должен присутствовать хотя бы один контейнер. Поскольку контейнеры являются компонентами, один контейнер может находиться в составе другого. Это позволяет формировать так называемую иерархию контейнеров, на вершине которой должен находиться контейнер верхнего уровня.
Подавляющее большинство компонентов Swing создается с помощью классов, являющихся потомками класса JComponent. Класс JComponent реализует функциональные модификация данной модели, называемая архитектурой " модель-представитель" или архитектурой с выделенной моделью.
Классы, представляющие все компоненты Swing, содержатся в пакете javax.swing. В таблице 7.1 приведены имена классов для компонентов Swing.
Таблица 7.1 Компоненты Swing
Компонент
| Назначение компонента
|
JLabel
| " Метка" – вывод однострочного неформатированного текста
|
JButton
| " Кнопка" – кнопка с текстом и/или с картинкой
|
JToggleButton
| " Защелкивающаяся кнопка" – кнопка с фиксацией. Может быть одной из нескольких таких кнопок в группе, в этом случае нажатие одной кнопки вызывает отпускание другой. Работа группы обеспечивается компонентом ButtonGroup, который должен быть перетащен на форму, а затем назначен свойству buttonGroup.
|
JCheckBox
| " Чекбокс" – пункт выбора с независимой фиксацией.
|
JRadioButton
| " Радиокнопка" – пункт выбора с зависимой фиксацией, должен быть одним из нескольких в группе. Работа группы обеспечивается компонентом ButtonGroup.
|
ButtonGroup
| Обеспечивает работу групп компонентов JToggleButton или JradioButton.
|
JComboBox
| " Комбобокс" – выпадающий список.
|
JList
| Прокручивающийся список.
|
JTextField
| " Текстовое поле" – однострочный пункт ввода и редактирования текста.
|
JTextArea
| " Текстовая область" – многострочный пункт ввода и редактирования текста.
|
JPanel
| " Панель" – группирующий компонент, позволяющий располагать на себе другие компоненты. Передвижение панели перемещает вместе с ней все расположенные на ней компоненты. По умолчанию свойство layout (" размещение" ) установлено как FlowLayout –" в виде потока". Для простых задач вместо этого компонента лучше использовать JLayeredPane.
|
JTabbedPane
| " Панель с закладками" –каждый положенный на нее компонент показывается в отдельной закладке. Чтобы разместить на одной закладке несколько компонентов, сначала положите на панель с закладками обычную панель. Для того, чтобы создать последующие закладки, выделите панель с закладками, вызовите правой кнопкой мыши всплывающее меню, пункт Add From Palette (" добавить из палитры" ), и добавьте еще одну панель или другой компонент.
|
JScrollBar
| Независимая полоса прокрутки. Используется редко – для программно управляемой прокрутки содержимого компонентов, для которых отсутствуют встроенные полосы прокрутки.
|
JScrollPane
| " Панель с полосами прокрутки"
|
JMenuBar
| " Меню формы" – предназначено для расположения в нем компонентов типа JMenu (заголовков меню).
|
JPopupMenu
| " Всплывающее меню" – предназначено для расположения в нем компонентов типа JMenuItem (пунктов меню).
|
JSlider
| " Ползунок". Используется для плавной регулировки числовых величин, а также связанных с ними программно регулируемых изменений.
|
JProgressBar
| " Прогрессбар" – полоса показа доли выполнения задачи. Показывает уровень, отражающий долю выполнения задачи
|
JSplitPane
| " Панель с разделителем" – панель, состоящая из двух частей, между которыми имеется линия разделителя, которую можно перетаскивать мышью, меняя взаимный размер частей.
|
JFormattedTextField
| " Поле ввода форматированного текста"
|
JPasswordField
| " Поле ввода пароля" – вводимый текст отображается звездочками.
|
JSpinner
| " Спиннер" – поле ввода числа с кнопками увеличения/уменьшения.
|
JSeparator
| " Сепаратор" – разделительная линия. Используется в декоративных целях для разделения рабочих областей формы и других группирующих компонентов.
|
JTextPane
| " Текстовая панель". По умолчанию автоматически переносит текст на новую строку. А не располагает в одну строку с показом горизонтального скроллера, как это делает JTextArea.
|
JEditorPane
| " Панель текстового редактора"
|
JTree
| " Дерево" – показывает дерево, в котором каждая ветвь может быть с иконками и текстом, а узлы разворачиваются и сворачиваются.
|
JTable
| " Таблица" – показ текстовой таблицы. Имеет возможность заполнения значениями по умолчанию на этапе проектирования.
|
JToolBar
| " Тулбар" – панель инструментов. Обычно на нем размещают кнопки JToggleButton, для которых назначены иконки.
|
JInternalFrame
| " Дочернее окно" – окно многооконного приложения. Его можно перемещать в пределах родительского окна – главного окна приложения. В настоящее время такой стиль приложений практически не используется.
|
JLayeredPane
| " Панель с абсолютным позиционированием элементов"
|
JDesktopPane
| " Панель – рабочий стол". Еще один тип панели с абсолютным позиционированием элементов.
|
JOptionPane
| " Диалоговая панель" – предназначена для показа диалоговых форм. В отличие от большинства других компонентов работа идет с помощью методов класса. Имеются вызовы диалогов:
· С сообщением:
· javax.swing.JOptionPane.showMessageDialog(null, " Кнопку нажали" ); · JOptionPane.showMessageDialog(null, " Привет! ", " Заголовок сообщения", JOptionPane.INFORMATION_MESSAGE); · С подтверждением:
int option= javax.swing.JOptionPane.showConfirmDialog(null, " Продолжить? " ); Проверка, какуюкнопкунажалиилидиалогзакрылибезосуществлениявыбора, осуществляетсясравнениемсконстантамиjavax.swing.JOptionPane.NO_OPTION, CANCEL_OPTION, CLOSED_OPTION, OK_OPTION, YES_OPTION
· С предложением ввести значение:
String input=javax.swing.JOptionPane.showInputDialog(null, " Введите значение: " ); – при отказе от ввода возвращается null.
Первый параметр – имя формы, в которой показывается диалог. Если он null – используется форма по умолчанию (главная форма приложения).
Существуют варианты указанных выше методов, позволяющие при вызове задавать дополнительные параметры диалога (заголовок, надписи на кнопках и др.).
|
JColorChooser
| " Диалог выбора цвета" – предназначен для выбора пользователем цвета.
|
JFileChooser
| " Диалог выбора файла" – предназначен для выбора пользователем файлов. Перед использованием требуется положить его на какую-нибудь диалоговую форму ( JDialog, JFrame ) или какой-нибудь группирующий компонент формы.
|
JFrame
| " Экранная форма". Показывается вызовом вида jFrame1.setVisible(true);
|
JDialog
| " Диалоговая форма". Показывается вызовом вида jDialog1.setVisible(true);
|
В Swing определены два типа контейнеров. К первому типу относятся контейнеры верхнего уровня: JFrame, JApplet, JWindow и JDialog. Они не принадлежат к числу подклассов JComponent, но тем не менее являются потомками Component и Container. В отличие от других компонентов Swing; контейнеры верхнего уровня являются тяжеловесными. По этим причинам контейнеры верхнего уровня составляют специальную группу в наборе Swing.
Как следует из названия, контейнер верхнего уровня должен находиться на вершине иерархии. Он не может включаться в состав других контейнеров. Более того, любая иерархия должна начинаться именно с контейнера верхнего уровня. В приложениях для этой цели чаще всего используется объект JFrame, в аплетах – JApplet.
Контейнеры второго типа – это легковесные контейнеры, являющиеся потомками JComponent. В качестве примеров легковесных контейнеров можно привести JPanel и JRootPane. Легковесные контейнеры могут включаться в другие контейнеры, поэтому они часто используются для объединения группы связанных друг с другом компонентов.
В каждом контейнере верхнего уровня реализован набор панелей. На вершине иерархии находится корневая панель, т.е. экземпляр класса JRootPane. Это легковесный контейнер, цель которого – управление другими панелями и, при необходимости, полосой меню. Корневая панель включает в себя " стеклянную" панель (glasspane), панель содержимого (contentpane) и панель слоя (layeredpane).
" Стеклянная" панель – это панель верхнего уровня, которая расположена поверх остальных панелей. По умолчанию " стеклянная" панель представляет собой " прозрачный экземпляр" JPanel. " Стеклянная" панель позволяет управлять событиями мыши, относящимися ко всему контейнеру, а не к содержащимся в нем компонентам. Она также обеспечивает рисование компонентов. В большинстве случаев необходимость непосредственного взаимодействия со " стеклянной" панелью не возникает.
Панель слоя представляет собой экземпляр класса JLayeredPane. Она поддерживает " третье измерение" для компонентов, т.е. определяет правила перекрытия одних компонентов другими. (Панель слоя позволяет задавать Z-расположение компонента, однако эта возможность используется сравнительно редко.) В составе панели слоя находится панель содержимого и может также находиться строка меню.
Несмотря на то что " стеклянная" панель и панель слоя – неотъемлемые части контейнера верхнего уровня и выполняют важные функции, их действия большей частью скрыты не только от пользователей, но и от разработчиков. Приложение в основном взаимодействует с панелью содержимого, так как именно в нее включаются визуальные компоненты. Другими словами, добавляя компонент, например кнопку, к контейнеру верхнего уровня, вы на самом деле добавляете его к панели содержимого. По умолчанию панель содержимого представляет собой " непрозрачный экземпляр" JPanel.
Для обращения к " стеклянной" панели, панели содержимого и панели слоя в JRootPane предусмотрены переменные glassPane, contentPane и layeredPane.
Популярное: