
- •Введение
- •Основы программирования на java Язык программирования Java
- •Базовый синтаксис языка
- •Объектная модель Java
- •Наследование
- •Жизненный цикл объекта
- •Примитивные типы данных
- •Управляющие конструкции
- •Исключительные ситуации
- •Механизм фоновых процессов
- •Класс Thread и интерфейс Runnable
- •Средства синхронизации процессов
- •Принципы построения Java-программы
- •Автоматическое освобождение памяти в Java-программе
- •Java и безопасность
- •Оконный пользовательский интерфейс в Java-программе
- •Основы построения графического пользовательского интерфейса Компоненты и контейнеры
- •Организация интерфейса
- •События
- •Методы класса Component, связанные с обработкой событий
- •Лабораторный практикум Общие указания
- •Лабораторная работа № 1
- •Методические указания.
- •Требования к выполнению лабораторной работы
- •Варианты заданий
- •Лабораторная работа № 2
- •Методические указания
- •Требования к выполнению лабораторной работы
- •Варианты заданий
- •Методические указания
- •Требования к выполнению лабораторной работы
- •Варианты задания
- •Методические указания
- •Требования к выполнению лабораторной работы
- •Варианты заданий
- •Разработать апплет – стрелочный секундомер.Список литературы
События
В 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 и другие реализованы таким образом, что при их вызове проверяется наличие объекта-наблюдателя за даным типом события и если таковой обнаружен, то производится вызов одного из методов, объявленных для данного типа события в интерфейсе объекта-наблюдателя.