Источники событий

Обработка событий

Модель делегирования событий

Современный подход к обработке событий основан на модели делегирования событий (delegation event model). Эта концепция весьма проста: источник генерирует событие и посылает его одному или нескольким блокам прослушивания (listeners) событий. В этой схеме, блок прослушивания просто ждет поступления события. Получив событие, блок прослушивания обрабатывает его и затем возвращает управление. Преимущество указанного способа состоит в том, что логика приложения, обрабатывающего события, четко отделена от логики интерфейса пользователя, генерирующего эти события. Элемент интерфейса пользователя способен "делегировать" обработку события отдельной части кода.

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

События

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

Могут происходить также события, которые непосредственно не вызываются взаимодействиями с интерфейсом пользователя. Событие, например, может сгенерировать таймер, завершающий работу, счетчик, превышающий предустановленное значение, программа в момент завершения операций или возникновения особых программных ситуаций, аппаратный отказ и т. д.

Источники событий

Источник — это объект, который генерирует событие. Генерация события происходит тогда, когда каким-то образом изменяется внутреннее состояние этого объекта. Источники могут генерировать несколько типов событий.

Чтобы блоки прослушивания могли принимать уведомление об определенном типе событий, источник должен регистрировать эти блоки. Каждый тип событий имеет собственный метод регистрации. Общая форма таких методов:

public void add Type Listener(Type Listener el)

Здесь Type — это имя события, a el — ссылка на блок прослушивания события. Например, метод, который регистрирует блок прослушивания события клавиатуры, называется addKeyListenen). Метод, регистрирующий блок прослушивания движения мыши, называется addMouseMotionListener(). Когда событие происходит, все зарегистрированные блоки прослушивания уведомляются (о происшедшем событии) и принимают копию объекта события. Во всех случаях уведомления посылаются только блокам прослушивания, которые зарегистрировались для их приема.

Некоторые источники могут позволять регистрироваться только одному блоку прослушивания. Общая форма такого метода:

public void add Typed Listener(Type Listener el) throws Java.util.TooManyListenersException

где Type— имя события, a el — ссылка на блок прослушивания события. При наступлении события зарегистрированный блок прослушивания уведомляется.

Источник должен также обеспечить метод, который позволяет блоку прослушивания не регистрировать заинтересованность в определенном типе событий. Общая форма такого метода:

public void remove Type Listener (Type Listener el)

Здесь Tуре — имя события, a el — ссылка на блок прослушивания события. Например, чтобы удалить блок прослушивания клавиатуры, следует вызвать методremoveKeyListener().

Методы, которые добавляют или удаляют блоки прослушивания, обеспечиваются генерирующим событие источником. Например, класс component обеспечивает методы для добавления и удаления блоков прослушивания событий клавиатуры и мыши.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: