-
Графическая библиотека AWT предлагает более двадцати готовых компонентов. Они показаны на рис. 8.2. Наиболее часто используются подклассы класса Component: классы Button, Canvas, Checkbox, Choice, Container, Label, List, Scrollbar, TextArea, TextField, Panel, ScrollPane, Window, Dialog, FileDialog, Frame.
-
Основа класса – статические константы, определяющие форму курсора: | CROSSHAIR_CURSOR – курсор в виде креста, появляется обычно при поиске позиции для размещения какого-то элемента; | DEFAULT_CURSOR – обычная форма курсора – стрелка влево вверх;
-
Кроме этих предопределенных курсоров можно задать свою собственную форму курсора. Ее тип носит название CUSTOM_CURSOR. Сформировать свой курсор можно методом: | createCustomCursor(Image cursor, Point hotspot, String name) | …создающим объект класса cursor и возвращающим ссылку на него.
-
Событие ComponentEvent происходит при перемещении компонента, изменении его размера, удалении с экрана и появлении на экране. | Событие FocusEvent возникает при получении или потере фокуса. | Событие KeyEvent проявляется при каждом нажатии и отпускании клавиши, если компонент имеет фокус ввода.
-
Кроме событий Класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent при добавлении и удалении компонентов в контейнере происходит событие ContainerEvent. | Перейдем к рассмотрению конкретных компонентов. Самый простой компонент описывает класс Label.
-
В классе Label происходят события классов Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent. | Немногим сложнее класс Button. | Компонент Button | Компонент Button – это кнопка стандартного для данной графической системы вида с надписью, умеющая реагировать на щелчок кнопки мыши – при нажатии она "вдавливается" в плоскость контейнера, при отпускании – становится "выпуклой".
-
Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent. При воздействии на кнопку происходит Событие ActionEvent. | Немного сложнее класса Label класс checkbox, создающий кнопки выбора.
-
В классе Checkbox происходят события класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, а при изменении состояния кнопки возникает событие ItemEvent. | В библиотеке AWT радиокнопки не образуют отдельный компонент.
-
Чтобы организовать группу радиокнопок, надо сначала сформировать объект класса CheckboxGroup, а затем создавать кнопки конструкторами: | Checkbox(String label, CheckboxGroup group, boolean state) | Checkbox(String label, boolean state, CheckboxGroup group) | Эти конструкторы идентичны, просто при записи конструктора можно не думать о порядке следования его аргументов.
-
Компонент choice – это раскрывающийся список, один, выбранный, пункт (item) которого виден в поле, а другие появляются при щелчке кнопкой мыши на небольшой кнопке справа от поля компонента. | Вначале конструктором Choice () создается пустой список.
-
Компонент List – это список с полосой прокрутки, в котором можно выделить один или несколько пунктов. Количество видимых на экране пунктов определяется конструктором списка и размером компонента. | В классе три конструктора: | List() – создает пустой список с четырьмя видимыми пунктами;
-
Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, при двойном щелчке кнопкой мыши на выбранном пункте происходит событие ActionEvent. | В листинге 10.2 задаются компоненты, аналогичные компонентам листинга 10.1, с помощью классов choice и List, а рис.
-
В библиотеке AWT есть два компонента для ввода текста с клавиатуры: TextField, позволяющий ввести только одну строку, и TextArea, в который можно ввести множество строк. | Оба класса расширяют класс Textcomponent, в котором собраны их общие методы, такие как выделение текста, позиционирование курсора, получение текста.
-
Компонент TextField – это поле для ввода одной строки текста. Ширина поля измеряется в колонках (column). Ширина колонки – это средняя ширина символа в шрифте, которым вводится текст. Нажатие клавиши Enter заканчивает ввод и служит сигналом к началу обработки введенного текста, т. е.
-
Компонент TextArea – это область ввода с произвольным числом строк. Нажатие клавиши Enter просто переводит курсор в начало следующей строки. В области ввода могут быть установлены линейки прокрутки, одна или обе.
-
Кроме Событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, при изменении текста пользователем происходит событие TextEvent. | В листинге 10.3 создаются три поля: tf1, tf2, tf3 для ввода имени пользователя, его пароля и заказа, и не редактируемая область ввода, в которой накапливается заказ. В поле ввода пароля tf2 появляется эхо-символ *. Результат показан на рис. 10.3.
-
Компонент Scrollbar – это полоса прокрутки, но в библиотеке AWT класс Scrollbar используется еще и для организации ползунка (slider). Объект может располагаться горизонтально или вертикально, обычно полосы прокрутки размещают внизу и справа.
-
Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, при изменении значения пользователем происходит событие AdjustmentEvent. | В листинге 10.4 создаются три вертикальные полосы прокрутки – красная, зеленая и синяя, позволяющие выбрать какое-нибудь значение соответствующего цвета в диапазоне 0-255, с начальным значением 127.
-
Контейнер Panel – это невидимый компонент графического интерфейса, служащий для объединения нескольких других компонентов в один объект типа Panel. | Класс Panel очень прост, но важен. В нем всего два конструктора: | Panel () – создает контейнер с менеджером размещения по умолчанию FlowLayoutJ
-
Контейнер ScrollPane может содержать только один компонент, но зато такой, который не помещается целиком в окне. Контейнер обеспечивает средства прокрутки для просмотра большого компонента.
-
Контейнер window – это пустое окно, без внутренних элементов: рамки, строки заголовка, строки меню, полос прокрутки. Это просто прямоугольная область на экране. Окно типа window самостоятельно, не содержится ни в каком контейнере, его не надо заносить в контейнер методом add().
-
Контейнер Frame – это полноценное готовое окно со строкой заголовка, в которую помещены кнопки контекстного меню, сворачивания окна в ярлык и разворачивания во весь экран и кнопка закрытия приложения. Заголовок окна записывается в конструкторе или методом setTitie(string title).
-
Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, при изменении размеров окна, его перемещении или удалении с экрана, а также показа на экране происходит событие windowEvent.
-
Контейнер Dialog – это окно обычно фиксированного размера, предназначенное для ответа на сообщения приложения. Оно автоматически регистрируется в оконном менеджере графической оболочки, следовательно, его можно перемещать по экрану, менять его размеры.
-
Кроме Событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, при изменении размеров окна, его перемещении или удалении с экрана, а также показа на экране происходит событие windowEvent. | В листинге 10.6. создается модальное окно доступа, в которое вводится имя и пароль.
-
Контейнер FileDialog – это модальное окно с владельцем типа Frame, содержащее стандартное окно выбора файла операционной системы для открытия (константа LOAD) или сохранения (константа SAVE). Окна операционной системы создаются и помещаются в объект класса FileDialog автоматически.
-
Создать свой компонент, дополняющий свойства и методы уже существующих компонентов AWT, очень просто – надо лишь образовать свой класс как расширение существующего класса Button, TextField или другого класса-компонента.
-
"Легкий" компонент, не имеющий своего peer-объекта в графической системе, создается как прямое расширение класса component или Container. При этом необходимо задать те действия, которые в "тяжелых" компонентах выполняет peer-объект.