Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Po_Tp.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.44 Mб
Скачать

4. События и их обработка

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

4.1 Обработчики событий от мыши и клавиатуры

Многие обычно используемые обработчики событий определены для класса Applet и по умолчанию не делают ничего - чтобы их использовать, надо переопределить метод суперкласса апплетов в классе создаваемого апплета, например:

public boolean mouseMove(Event evt,int x,int y)

{ // здесь можно разместить код, выполняющийся

// если мышь перемещается

return true; // событие обработано

}

Метод mouseMove() вызывается всякий раз при перемещении мыши. После обработки события метод возвращает true.

Перечислим часто используемые обработчики событий:

  • boolean mouseDown(Event evt, int x, int y) - нажата кнопка мыши, параметры x и у указывают расположение мыши.

  • boolean mouseUp(Event evt, int x, int y) - кнопка мыши отпущена.

  • boolean mouseMove(Event evt, int x, int y) - перемещение мыши.

  • boolean mouseDrag(Event evt, int x, int y) - перемещение мыши с нажатой кнопкой.

  • boolean mouseEnter(Event evt, int x, int y) - перемещение мыши на окно апплета.

  • boolean mouseExit(Event evt, int x, int y) - мышь покинула окно апплета.

  • boolean keyDown(Event evt, int key) - нажата клавиша перемещения курсора или функциональная клавиша. Параметр key указывает эту клавишу.

  • boolean keyUp(Event evt, int key) - клавиша перемещения курсора или функциональная клавиша отпущена.

Переопределяя эти методы в подклассе класса Applet, можно обрабатывать различные действия пользователя.

Обработчикам событий клавиатуры передается в качестве одного из параметров идентификатор клавиши. Идентификатор клавиши - это целое число, которое соответствует нажатой клавише. Обычные клавиши символов имеют значения, соответствующие их ASCII-кодам. Кроме того, Java поддерживает множество специальных клавиш (UP, DOWN, LEFT, RIGHT, PGUP, PGDOWN, HOME, END, F1 - F12). Эти специальные клавиши фактически определены как статические целые переменные (константы) класса Event. Следующий фрагмент иллюстрирует проверку нажатия клавиш управления курсором:

public boolean keyDown(Event evt, ink key)

{ switch(key)

{ case Event.UP: ......; break;

case Event.DOWN: ......; break;

case Event.LEFT: ......; break;

case Event.RIGHT: ......; break;

default: break;

}

return true;

}

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

Рассмотрим, что происходит при возникновении события в окне апплета. При этом создается объект класса Event, в котором сохраняется информация для идентификации события и который передается затем методу handleEvent(). Этот метод проверяет тип события и вызывает соответствующий обработчик, передавая ему относящиеся к событию параметры. Например, при перемещении мыши возникает событие типа MOUSE_MOVE, которое и передается методу handleEvent(). Последний вызывает соответствующий этому событию метод mouseMove(), передавая ему положение мыши.

Класс Event содержит переменные, в которых хранится информация о событии. Перечислим переменные, описывающие событие:

  • Object target - компонент (объект), в котором произошло событие

  • int id - тип события, одна из констант, определенная в классе Event.

  • int key - идентификатор клавиши

  • int modifiers - состояние маски наложения клавиш

  • long when - время, в которое произошло событие.

  • int x - коодината x события

  • int y - коодината y события

  • int clickCount - равна 1 или 2 в зависимости от того был сделан одинарный или двойной щелчок.

Обрабатывать события мыши и клавиатуры можно не только при помощи специальных обработчиков. Если необходимо обработать большое количество различных событий без замены каждого конкретного метода-обработчика, то можно переопределить метод handleEvent(). Нужно только помнить, что методы-обработчики событий не будут вызываться без явного их вызова в переопределенном методе handleEvent(). Приведем пример, в котором некоторые сообщения от мыши обрабатываются в переопределенном методе handleEvent(), а все остальные передаются на обработку методу суперкласса:

public boolean handleEvent(Event evt)

{ switch(evt.id)

{ default: // передача сообщения на обработку

// методу базового класса

return super.handleEvent(evt);

case Event.MOUSE_MOVE: ....; break;

case Event.MOUSE_DRAG: ....; break;

case Event.MOUSE_UP: ....; break;

case Event.MOUSE_DOWN: ....; break;

}

return true;

}

События можно генерировать прямо в программе. Для этого нужно просто создать новый экземпляр класса Event, используя один из конструкторов, и послать его соответствующему объекту (можно даже самому себе):

// создание сообщения текущему объекту класса (самому себе)

Event Evt=new Event(this, // пункт назначения

System.currentTimeMillis(), // время события

MOUSE_MOVE, // тип события

new_x,new_y, // координаты x и y события

0,0); // идентификатор клавиши и модификаторы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]