Пять уроков по Java

Мир сообщений


Как известно, работа любого Windows-приложения основана на обработке сообщений. Сообщения - это асинхронные (т. е. они могут произойти в любой момент) вызовы специальных методов, называемых обработчиками сообщений. Через вызовы обработчиков сообщений система уведомляет, что в программе произошло некоторое событие, например в окне программы был произведен щелчок мышью. Если система Windows имеет список из сотен событий, которые могут произойти в процессе работы программы, то Java-приложения в этом плане гораздо проще. Всего лишь 13 элементарных событий могут случиться в программе Java.

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

Пусть вас не пугает, что описания сообщений выглядят несколько запутанно, - вам очень редко придется иметь с ними дело. Сам язык Java предлагает вам посильную помощь, вызывая для каждого из описанных выше собщений отдельный метод-обработчик. Все, что вам требуется, это описать в своем классе нужный обработчик события, а виртуальная машина Java сама вызовет его в тот момент, когда это событие произойдет. Единственное условие при написании таких методов обработки событий - соблюдайте синтаксис, который задан спецификацией языка Java. Если же вы ошибетесь в описании, то в лучшем случае компилятор сообщит об этом, в худшем - будет создан перегруженный метод (помните, Java, как и Си++, допускает перегруженные методы), который не будет ни разу вызван.

Заметим, что аргумент evt типа Event - это то самое событие, которое заставило систему вызвать обработчик того или иного события. Этот параметр редко используется, если только нет необходимости узнать какие-то частности относительно произошедшего события, как, например, точное время, когда оно произошло.

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



Содержание раздела