Читаем Java 7 полностью

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


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

Событие (event) в библиотеке AWT возникает при воздействии на компонент какими-нибудь манипуляциями мышью, при вводе с клавиатуры, при перемещении окна, изменении его размеров.

Объект, в котором произошло событие, называется источником (source) события.

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

Во главе иерархии классов-событий стоит класс Eventobject из пакета java.utii — непосредственное расширение класса object. Его расширяет абстрактный класс AWTEvent из пакета java.awt — глава классов, описывающих события библиотеки AWT. Дальнейшая иерархия классов-событий AWT показана на рис. 15.1. Все классы, отображенные на рисунке, кроме класса AWTEvent, собраны в пакет java.awt. event.

□ События типа ComponentEvent, FocusEvent, KeyEvent, MouseEvent возникают во всех компонентах.

□ События типа ContainerEvent- в контейнерах класса Container, а значит, и во всех

компонентах графической библиотеки Swing.

□ События типа WindowEvent возникают в окнах класса Window и в его наследниках.

□ События типа TextEvent генерируются только в компонентах TextComponent, TextArea, TextField.

□ События типа ActionEvent проявляются в компонентах Button, List, TextField, JComboBox, JTextField, кнопках класса AbstractButton и его наследниках.

□ События типа ItemEvent возникают в компонентах Checkbox, JCheckbox, Choice, JComboBox, List и в кнопках класса AbstractButton и его наследниках.

□ Наконец, события типа AdjustmentEvent возникают только в полосах прокрутки

Scrollbar и JScrollBar.

Узнать, в каком объекте произошло событие, можно методом getSource() класса EventObj ect. Этот метод возвращает ссылку на объект типа Obj ect.

В каждом из этих классов-событий определен метод paramString(), возвращающий содержимое объекта данного класса в виде строки String. Кроме того, в каждом классе есть свои методы, предоставляющие те или иные сведения о событии. В частности, метод getID() возвращает идентификатор (identifier) события — целое число, обозначающее тип события. Идентификаторы события определены в каждом классе-событии как константы.

Графическая библиотека Swing добавляет еще несколько классов-событий, собранных в пакет javax.swing.event. Большинство этих классов наследуют напрямую от класса

EventObj ect.

Событие нельзя обработать произвольно написанным методом. У каждого события есть свои методы, к которым обращается исполняемая система Java при его возникновении. Они описаны в интерфейсах-слушателях (listener). Для каждого показанного на рис. 15.1 типа событий, кроме InputEvent (оно редко используется самостоятельно), есть свой интерфейс. Имена интерфейсов составляются из имени события и слова "Listener", например: ActionListener, MouseListener. Методы интерфейса "слушают", что происходит в потенциальном источнике события. При возникновении события эти методы автоматически выполняются, получая в качестве аргумента объект-событие и используя при обработке сведения о событии, содержащиеся в этом объекте.

AWTEvent

—ActionEvent —AdjustmentEvent

- ContainerEvent

- FocusEvent

- InputEvent-

- PaintEvent — WindowEvent

KeyEvent

MouseEvent

— ComponentEvent -

— ItemEvent —TextEvent

Рис. 15.1. Иерархия классов, описывающих события AWT

Чтобы задать обработку события определенного типа, надо реализовать соответствующий интерфейс. Классы, реализующие такой интерфейс, классы-обработчики (handlers) события называются слушателями (listeners): они "слушают", что происходит в объекте, чтобы отследить возникновение события и обработать его.

Чтобы связаться с обработчиком события, классы-источники события должны получить ссылку на экземпляр eventHandler класса-обработчика события одним из методов

addXxxListener(XxxEvent eventHandler), где Xxx — имя события.

Такой способ регистрации, при котором слушатель оставляет "визитную карточку" источнику для своего вызова при наступлении события, называется обратным вызовом (callback). Им часто пользуются студенты, которые, звоня родителям и не желая платить за телефонный разговор, говорят: "Перезвони мне по такому-то номеру".

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных