На заметку:
Методы регистрации и отмены регистрации обработчика события являются членами класса объекта компонента, в котором регистрируется обработчик или отменяется регистрация обработчика.
Осталась самая малость — разобраться с самими обработчиками событий. Обработчик должен содержать описание методов, вызываемых при обработке события. Эти методы давно определены, но не описаны. Здесь намек на то, что методы, вызываемые при обработке того или иного события, объявлены в специальных интерфейсах. Чтобы создать обработчик, необходимо реализовать соответствующий интерфейс и описать там методы обработки событий. Как правило, таких методов в интерфейсе немного - чаще всего он там один.
На заметку:
Для обработки определенного события предназначен определенный интерфейс - в обработчике этого события необходимо реализовать соответствующий интерфейс.
Чтобы узнать имя интерфейса, который нужно реализовать для обработки события, необходимо в имени класса события заменить слово Event на слово Listener
На заметку:
В этом правиле есть небольшие исключения. Например, для события класса MouseEvent есть, кроме интерфейса MouseListener, еще и интерфейс MouseMotionListener. Но такие исключения погоды, как говорится, не делают.
Кроме непосредственной реализации нужного интерфейса, при создании обработчика события можно воспользоваться классами адаптеров. Адаптер — это встроенный класс, который реализует тот или иной интерфейс обработчика событий. Обычно в адаптерах представлены пустые реализации методов интерфейса. Класс обработчика на основе адаптера создается путем наследования адаптера как суперкласса.
На заметку:
Адаптеры предусмотрены для тех интерфейсов, которые содержат объявление больше, чем одного метода. Например, для интерфейса ActionListener (и соответствующего ему события ActionEvent) адаптера нет, поскольку в интерфейсе объявлен всего один метод actionPerformed().
Хотя адаптеры принципиально ничего не меняют, их применение во многих случаях является удобным, поскольку при наследовании адаптера достаточно переопределить лишь те методы, которые используются в программном коде для обработки конкретного события.
В табл. 4 приведены некоторые классы-адаптеры и соответствующие им интерфейсы (то есть интерфейсы, реализованные в адаптере).
Табл. 4. Классы-адаптеры и соответствующие им интерфейсы
Класс-адаптер |
Интерфейс, реализуемый в классе |
FocusAdapter |
FocusListener |
KeyAdapter |
KeyListener |
MouseAdapter |
MouseListener |
MouseMotionAdapter |
MouseMotionListener |
MouseInputAdapter WindowAdapter |
MouseListener И MouseMotionListener WindowListener |
ComponentAdapter |
ComponentListener |
ContainerAdapter |
ContainerListener |
Несложно заметить, имя адаптера, как правило, получается из имени реализуемого интерфейса заменой слова Listener на Adapter.
Как все это счастье используется на практике, рассмотрим на следующем занятии на конкретных примерах.
Резюме
Приложения с графическим интерфейсом в Java создаются на основе классов библиотеки AWT или Swing.
Для основных компонентов графического интерфейса существуют встроенные классы. Создание компонента подразумевает создание объекта соответствующего класса.
На основе существующих классов можно создавать собственные классы для компонентов с предопределенными свойствами.
В Java используется система обработки событий с делегированием. Для обработки того или иного события создается объект-обработчик. Объект-обработчик регистрируется в компоненте, который может вызвать событие.
Классы для обработчиков событий создаются путем реализации стандартных интерфейсов или наследованием специальных классов-адаптеров.
