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

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

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

Нажмите на кнопку и вы увидите, что ничего не произойдет.

На них можно щелкать по кнопке на экране, но ничего происходить не будет. Можно ввести текст в поле ввода, но он не станет восприниматься и обрабатываться программой. Все это происходит из-за того, что мы не задали обработку действий пользователя — обработку событий.

Вы должны знать, что обработка событий имеет огромное значение для программ с графическим пользовательским интерфейсом. Для того чтобы построить ГПИ необходимо очень хорошо разбираться в механизме обработки событий в Java. Давайте разберемся в этом механизме.

Вопрос: Что вы считаете событием в повседневной жизни?

Тут можно провести определенную аналогию, но с более точным формулированием.

В Java cобытие — это специальный объект, описывающий изменение состояния источника. Это может быть, например, щелчок кнопки, ввод символа с клавиатуры, выбор элемента в списке и т.д. Событие может происходит и без участия пользователя, например, при использовании таймера. Также можно создавать собственные события.

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

В Java при обработке событий, предусмотренных в библиотеке AWT, программист

полностью контролирует передачу событий от источников событий (event sources)

(например, кнопок или полос прокруток) к слушателю событий (event listener). Любой

объект можно считать слушателем некоего события — на практике все объекты так или

иначе реагируют на события.

А слушатель (listener) — это объект, уведомляемый о событии. Он должен быть зарегистрирован источником событий и реализовывать методы для получения и обработки уведомлений.

Таким образом, обработка событий основана на модели делегирования событий (delegation event model) — источник извещает о событии одного или несколько слушателей (listener).

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

Поскольку язык Java является объектно-ориентированным, информация о событии

инкапсулируется в объекте события (event object). В языке Java все объекты событий представляют собой объекты классов, производных от класса java.util.EventObject.

Разумеется, для каждого типа событий существует свой подкласс, например подклассы ActionEvent и WindowEvent.

Различные источники могут порождать разные виды событий. Например, кнопка может посылать объекты класса ActionEvent, а окно — объекты класса WindowEvent.

Для регистрации объекта слушателя источником события применяется следую-

объектИсточникаСобытия.addCo6brrMeListener(объектСлушателяСобытия)

Например при создании кнопки:

Jbutton button = new JButton(«Ok»);

Теперь объект слушателя извещается о «наступлении события», связанного с кнопкой. Это может быть, например, простой щелчок.

Код, подобный приведенному выше, требует, чтобы класс, которому принадлежит

объект слушателя, реализовывал соответствующий интерфейс (в данном случае —

Для того чтобы реализовать интерфейс ActionListener, класс слушателя должен иметь метод с именем actionPerformed, получающий объект класса ActionEvent в качестве параметра.

class MyListener implements ActionListener

public void actionPerformed(ActionEvent event)

Когда пользователь, к примеру, щелкает на кнопку мыши, объект класса JButton создает объект класса ActionEvent и вызывает метод listener.actionPerformed (event), передавая ему этот объект события.

Более наочно можете увидеть это на схеме ниже:

При этом интерфейс ActionListener, который мы рассматривали выше, не ограничивается отслеживанием щелчков на кнопках.

Он используется во многих ситуациях:

• при двойном щелчке на пункте списка;

• при нажатии клавиши в поле ввода текста;

• по истечении заданного отрезка времени, отслеживаемого компонентом Timer.

Источник

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

Обработка событий основана на модели делегирования событий (delegation event model) — источник извещает о событии одного или несколько слушателей (listener). Слушатель ждёт до тех пор, пока не получит извещение о событии. При получении слушатель обрабатывает его и возвращает управления. Слушатель должен регистрироваться источником, чтобы получать извещения о событиях. Таким образом уведомления посылаются только тем слушателям, которые желают их получать.

Событие — это специальный объект, описывающий изменение состояния источника. Это может быть, например, щелчок кнопки, ввод символа с клавиатуры, выбор элемента в списке и т.д. Событие может происходит и без участия пользователя, например, при использовании таймера. Также можно создавать собственные события.

Источник регистрирует слушателей через отдельные методы регистрации. Как правило, имена методов имеют форму addТипListener(ТипListener listener) или setТипListener(ТипListener listener).

Тип — это имя события, а listener — ссылка на слушателя событий.

Слушатель (listener) — это объект, уведомляемый о событии. Он должен быть зарегистрирован источником событий и реализовывать методы для получения и обработки уведомлений.

Основной класс для событий — класс EventObject, который содержит два метода getSource() и toString().

Подклассы: ConnectionEvent, HandshakeCompletedEvent, NodeChangeEvent, PreferenceChangeEvent, PropertyChangeEvent, RowSetEvent, SSLSessionBindingEvent, StatementEvent и др.

Класс InputEvent

Абстрактный класс InputEvent является суперклассом для события ввода компонента и имеет два подкласса KeyEvent и MotionEvent.

Класс KeyEvent

Объект класса KeyEvent создаётся при клавиатурном вводе. Класс определяет множество целочисленных констант для клавиш, а также различные методы.

Источник

Читайте также:  Clear both в php
Оцените статью