Обработка событий
В двух предыдущих главах мы написали много программ, создающих интерфейсы, но, собственно, интерфейса, т. е. взаимодействия с пользователем, эти программы не обеспечивают. Можно щелкать по кнопке на экране, она будет "вдавливаться" в плоскость экрана, но больше ничего не будет происходить. Можно ввести текст в поле ввода, но он не станет восприниматься и обрабатываться программой. Все это происходит из-за того, что мы не задали обработку действий пользователя, обработку событий.
Событие (event) в библиотеке AWT возникает при воздействии на компонент какими-нибудь манипуляциями мышью, при вводе с клавиатуры, при перемещении окна, изменении его размеров.
Объект, в котором произошло событие, называется источником (source) события.
Все события в AWT классифицированы. При возникновении события исполняющая система Java автоматически создает объект соответствующего событию класса. Этот объект не производит никаких действий, он только хранит все сведения о событии.
Во главе иерархии классов-событий стоит класс Eventobject из пакета java.utii – непосредственное расширение класса object. Его расширяет абстрактный класс AWTEvent из пакета java.awt – глава классов, описывающих события библиотеки AWT. Дальнейшая иерархия классов-событий показана на рис. 12.1. Все классы, отображенные на рисунке, кроме класса AWTEvent, собраны в пакет java.awt.event.
Рис. 12.1. Иерархия классов, описывающих события AWT
События типа ComponentEvent, FbeusEvent, KeyEvent, MouseEvent возникают во всех компонентах.
А события типа ContainerEvent – только в контейнерах: Container, Dialog, FileDialog, Frame, Panel, ScrollPane, Window.
События типа WindowEvent возникают только в окнах: Frame, Dialog, FileDialog, Window.
События типа TextEvent генерируются только в контейнерах Textcomponent, TextArea, TextField.
События типа ActionEvent проявляются только в контейнерах Button, List, TextField.
События типа ItemEvent возникают только в контейнерах Checkbox, Choice, List.
Наконец, события типа AdjustmentEvent возникают только в контейнере Scrollbar.
Узнать, в каком объекте произошло событие, можно методом getsource() класса Eventobject. Этот метод возвращает тип object.
В каждом из этих классов-событий определен метод paramstring (), возвращающий содержимое объекта данного класса в виде строки string. Кроме того, в каждом классе есть свои методы, предоставляющие те или иные сведения о событии. В частности, метод getioo возвращает идентификатор (identifier) события – целое число, обозначающее тип события. Идентификаторы события определены в каждом классе-событии как константы.