Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЕКСТЫ для лабработы 3 / вариант №34.rtf
Скачиваний:
33
Добавлен:
02.04.2015
Размер:
739.11 Кб
Скачать

События

В AWT, как и в других оконных средах, события как программные объекты соответствуют внешним событиям. Типичный пример - нажатие на кнопку, в результате чего в AWT происходит событие ACTION_EVENT.

Таким образом, интерактивная часть программ в AWT соответствует модели программы, управляемой событиями. Другими словами, приложения или аплеты должны отслеживать события и обрабатывать их.

Рассмотрим подробнее, как это происходит в AWT. Каждый оконный интерфейс можно рассматривать как набор (возможно, вложенных друг в друга) компонент. Когда происходит событие, связанное с каким-то элементом интерфейса (например, кнопкой), то вызывается метод handleEvent (java версии 1.0) или processEvent (java 1.1 и выше). По умолчанию этот метод ничего не делает, а просто передает событие наверх, то есть тому объекту, в котором содержится инициатор события (например, объемлющему окну). Таким образом, если событие никто не перехватывает, оно достигает фрейма Frame (если это приложение) или аплета.

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

События в AWT для Java 1.0 представляются с помощью объектов класса Event, в котором определены следующие переменные:

public Object target; // инициатор событияpublic long when; // время, когда событие произошлоpublic int id; // тип события(KEY_PRESS, MOUSE_DOWN...)public int x; // координатыpublic int y; // курсораpublic int key; // код клавишиpublic int modifiers; // код модификатора (control, shift ...)public Object arg; // вспомогательные данныеpublic Event evt; // поле для соединения событий в списки

В Java 1.1 базовым классом для событий является EventObject. От него наследуется класс абстрактный AWTEvent, представляющий все события оконного интерфейса и, в свою очередь, являющийся родительским для всех типов AWT событий: ActionEvent, AdjustmentEvent, ComponentEvent, ItemEvent, TextEvent. Класс Event в Java 1.1 оставлен для обратной совместимости с версией 1.0

Методы класса Component, связанные с обработкой событий

Как уже было сказано, в разных версиях языка Java используются различные методы и подходы к обработке событий.

В java версии 1.0 используются следующие методы и механизмы.

Метод postEvent(), как правило, вызывается автоматически при наступлении соответствующего события. Обрабатываются события при помощи метода handleEvent(). По умолчанию этот метод, в зависимости от типа события, вызывает один из специализированных обработчиков событий, таких как action(), keyUp(), mouseDown(), gotFocus() и т.д.

Метод handleEvent() может быть переопределен. В этом случае, как правило, вся обработка соответствующего события будет происходить именно в этом методе, однако, если handleEvent() возвращает false, то вызывается handleEvent() для контейнера, содержащего данную компоненту.

В Java 1.1 все вышесказанное также справедливо. Все методы из версии 1.0 сохранены, для обеспечения обратной совместимости. Однако, пользоватся ими не рекомендуется. В новых версиях Java определны другие методы и способы обработки событий.

Метод dispatchEvent, эквивалентен postEvent. Обработка события ведется в методе processEvent. Данный метод, в зависимости от типа события вызывает методы processFocusEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processComponentEvent

Обработку событий можно, конечно, обеспечить путем перекрытия соотвествующих методов в объектах-наслдениках, но Java 1.0 пердоставляет специальный механизм объектов-наблюдателей, "прослушающих" события, возникающие в компоненте.

В AWT 1.1 определены интерфейсы, которые должны реализовывать объекты-наблюдатели для определнных групп событий. Например интерфейсы FocusListener, KeyListener и т. д. Существуют так же методы добавления к компоненту наблюдателя за определенной группой событий, например addFocusListener(FocusListener), addKeyListener(KeyListener).

Методы типа processFocusEvent, processKeyEvent и другие реализованы таким образом, что при их вызове проверяется наличие объекта-наблюдателя за даным типом события и если таковой обнаружен, то производится вызов одного из методов, объявленных для данного типа события в интерфейсе объекта-наблюдателя.

Соседние файлы в папке ТЕКСТЫ для лабработы 3