Глава 1
7 Модели обработки событийНесмотря на существенные изменения механизма обработки событий в
AWT, Java1.1 поддерживает обратную совместимость с моделью обМодель обработки событий
Java 1.0Все компоненты, которые мы с вами до сих пор создавали, выглядели неплохо, но были абсолютно бесполезны, поскольку мы не говорили о том, как можно обрабатывать ввод пользователя, осуществляемый с
Каждый компонент может обрабатывать события, заместив определенные методы, вызываемые используемой по умолчанию реализацией метода handleEvents класса Component. Этот метод вызывается с объекто
Все события, связанные с мышью, вызываются с копией оригинального события, а также с координатами х и у, в которых это событие произошло.
Аналогично, keyDown и keyUp вызываются при каждом нажатии и отпускании клавиши. Событие передается методу вместе с кодом нажатой клавиши. Событие можно проверить, чтобы посмотреть, нажаты ли в
Наконец, для работы со специальными событиями, например, с обратными вызовами (callback) из компонентов Button, Scrollbar и Menu, вам придется замещать метод action. Этот метод вызывается с исх
А вот и пример на обработку событий. Мы добавили объект Label к примеру с игрой в “пятнашки”, а также заместили метод action для того, чтобы обрабатывать события, возникающие при нажатии кнопок
/* <applet code = “EventDemo” width=200 height=200>
</applet>
*/
import java.awt.*;
import java.applet.*;
public class EventDemo extends Applet {
static final int n = 4;
Label lab = new Label("?", Label.CENTER);
public void init() {
setLayout(new GridLayout(n, n));
setFont(new Font("Helvetica", Font.BOLD, 24));
int width = Integer.parseInt(getParameter("width"));
int height = Integer.parseInt(getParameter("height"));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int k = i * n + j;
if (k > 0)
add(new Button("" + k));
}
}
lab.setFont(new Font("Helvetica", Font.ITALIC, 24));
add(lab);
}
public boolean action(Event e, Object o) {
if (o instanceof String) {
lab.setText((String) o);
}
return false;
} }
Поиграйте с этим примером –
EventDemo.html.Элементы и связанные с ними события
В таблице
5 для каждого элемента пакета AWT перечислены типы соВ столбцах с третьего по седьмой указано, устанавливаются ли значения переменных
-when (время события), х (координатСобытия, перечисленные для элементов класса
Component, применимы ко всем подклассам класса java.awt. ComponentТаблица
5. Элементы AWT и события Java 1.0,Элемент
Тип события
(id)w
h
e
n
x
y
k
e y
m
оd
s
Смысл события
Тип и значение переменной
argButton
(кнопка)ACTION_EVENT
Пользователь нажал кнопку
String:
обозначение кнопкиCheckbox
(флажок)ACTION_EVENT
Пользователь активизировал флажок
Boolean:
новое состояние флажкаChoice
(список выбора)ACTION_EVENT
Пользователь выбрал элемент списка
String:
обозначение выбранного элементаElement
(элемент)GOT_FOCUS
Получение фокуса ввода
не используется
Element
(элемент)KEY_ACTION
*
*
*
*
*
Пользователь нажал функциональную клавишу
не используется,
поскольку key содержит константу клавишиElement
(элемент)KEY_ACTION_ RELEASE
*
*
*
*
*
Пользователь отпустил функциональную клавишу
не используется,
поскольку key содержит константу клавишиElement
(элемент)KEY_PRESS
*
*
*
*
*
Пользователь нажал клавишу
не используется,
поскольку key содержит ASCII-код клавишиElement
(элемент)KEY_RELEASE
*
*
*
*
*
Пользователь отпустил клавишу
не используется,
поскольку key содержит ASCII-код клавишиElement
(элемент)LOST_FOCUS
Потеря фокуса ввода
не используется
Element
(элемент)MOUSE_ENTER
*
*
*
Курсор мыши попал в область объекта класса
Component
не используется
Element
(элемент)MOUSE_EXIT
*
*
*
Курсор мыши вышел из области объекта класса
Componentне используется
Element
(элемент)MOUSE_D0WN
*
*
*
*
Пользователь нажал кнопку мыши
не используется
Element
(элемент)
MOUSE_UP
*
*
*
*
Пользователь отпустил кнопку мыши
не используется
Element
(элемент)MOUSE_MOVE
*
*
*
*
Пользователь переместил мышь
не используется
Element
(элемент)MOUSE_DRAG
*
*
*
*
Пользователь переместил мышь при нажатой кнопке мыши
не используется
List
(список)ACTION_EVENT
Пользователь выполнил двойной щелчок мыши на элементе списка
String:
обозначение выбранного элементаList
(список)LIST_SELECT
Пользователь выбрал элемент списка
Integer:
индекс выбранного элементаList
(список)LIST_DESELECT
Пользователь убрал выделение с определенного элемента
Integer:
индекс элементаMenu Item
(меню)ACTION_EVENT
Пользователь выбрал пункт меню
String:
обозначение выбранного пунктаScrollbar
(полоса прокрутки)SCROLL_LINE_UP
Пользователь осуществил прокрутку вверх на строку
Integer:
позиция, до которой осуществляется прокруткаScrollbar
(полоса прокрутки)SCROLL_LINE_
DOWN
Пользователь осуществил прокрутку вниз на строку
Integer:
позиция, до которой осуществляется прокруткаScrollbar
(полоса прокрутки)SCROLL_PAGE_UP
Пользователь осуществил прокрутку вверх на страницу
Integer:
позиция, до которой осуществляется прокруткаScrollbar
(полоса прокрутки)SCROLL_PAGE_
DOWN
Пользователь осуществил прокрутку вниз на страницу
Integer:
позиция, до которой осуществляется прокруткаScrollbar
(полоса прокрутки)SCROLL_
ABSOLUTE
Пользователь переместил ползунок полосы прокрутки
Integer:
позиция, до которой осуществляется прокруткаText Field
(текст)ACTION_EVENT
Пользователь ввел текст и нажал
[Return].String:
введенный текстWindow
(окно)WINDOW_
DESTROY
Окно закрыто
не используется
Window
(окно)WINDOW_
ICONIFY
Окно представлено в виде пиктограммы
не используется
Window
(окно)WINDOW_
DEICONIFY
Окно восстановлено
не используется
Window
(окно)WINDOW_MOVED
*
*
Окно перемещено
не используется
Рисование "каракулей" в
Java 1.0Классический апплет, в котором используется модель обработки событий
Java 1.0. В нем методы mouseDown()/* <applet code = “Scribble1” width=200 height=200>
</applet>
*/
import java.applet.*;
import java.awt.*;
/**
Экран вроде бы пустой – но на нем можно рисовать ! –
Scribble1.html.Модель обработки событий
Java 1.1Новая модель обработки событий представляет собой, по существу, модель обратных вызовов (
callback). При созданииМодель обработки событий
Java 1.1 используется как в пакете AWT, так и в JavaBeans API.Для каждого события существует порождающий его объект, который можно получить с помощью метода
getSource(), и каждому событию пакеМодель обработки событий
Java 1.1 базируется на концепции слушателя событий. Слушателем события является объект, заинтересоИсточник события оповещает объект слушателя путем вызова специального метода и передачи ему объекта события (экземпляра подкласса
EventObject). Для того чтобы источник мог вВ интерфейсе слушателя событий может определяться несколько методов. Например, класс событий, подобный
MouseEvent, описывает несколько событий, связанных с мышью, таких какТаблица
6. Типы событий, слушатели и методы слушателей в Java 1.1
Класс события |
Интерфейс слушателя |
Методы слушателя |
ActionEvent |
ActionListener |
actionPerformed() |
AdjustmentEvent |
AdjustmentListener |
adjustmentValueChanged() |
ComponentEvent |
ComponentListener |
componentHidden() componentMoved() componentResized() Cor”componentShown() |
ContainerEvent |
ContainerListener |
componentAdded() componentRemoved() |
FocusEvent |
FocusListener |
focusGained() focusLost () |
ItemEvent |
ItemListener |
itemStateChanged() |
KeyEvent |
KeyListener |
keyPressed() keyReleased() keyTyped() |
MouseEvent |
MouseListener |
mouseClicked() mouseEntered() mouseExited() mousePressed() mouseReleased() |
MouseMotionListener |
mouseDragged() mouseMoved() |
|
TextEvent |
TextListener |
textValueChanged() |
WindowEvent |
WindowListener |
windowActivated() windowClosed() windowClosing() windowDeactivated() windowDeiconified() windowlconified() windowOpened() |
Для каждого интерфейса слушателей событий, содержащего несколько методов, в пакете
java.awt.event определен простой класс-адаптер,Как только реализован интерфейс слушателя или получены подклассы класса-адаптера, необходимо создать экземпляр нового класса, чтобы определить конкретный объект слушателя событий. Затем этот сл
Таблица 7. Элементы пакета
AWT и порождаемые ими события в Java1.1
Элемент |
Порождаемое событие |
Значение |
Button |
ActionEvent |
Пользователь нажал кнопку |
CheckBox |
ItemEvent |
Пользователь установил или сбросил флажок |
CheckBoxMenuItem |
ItemEvent |
Пользователь установил или сбросил флажок рядом с пунктом меню |
Choice |
ItemEvent |
Пользователь выбрал элемент списка или отменил его выбор |
Component |
ComponentEvent |
Элемент либо перемещен, либо он стал скрытым,либо видимым |
FocusEvent |
Элемент получил или потерял фокус ввода |
|
KeyEvent |
Пользователь нажал или отпустил клавишу |
|
MouseEvent |
Пользователь нажал или отпустил кнопку мыши, либо курсор мыши вошел или покинул область, занимаемую элементом, либо пользователь просто п | |
Container |
ContainerEvent |
Элемент добавлен в контейнер или удален из него |
List |
ActionEvent |
Пользователь выполнил двойной щелчок мыши на элементе списка |
ItemEvent |
Пользователь выбрал элемент списка или отменил выбор |
|
MenuItem |
ActionEvent |
Пользователь выбрал пункт меню |
Scrollbar |
AdjustmentEvent |
Пользователь осуществил прокрутку |
TextComponent |
TextEvent |
Пользователь внес изменения в текст элемента |
TextField |
ActionEvent |
Пользователь закончил редактирование текста элемента |
Window |
WindowEvent |
Окно было открыто, закрыто, представлено в виде пиктограммы, восстановлено или требует восстановления |
Рисование "каракулей" в
Java 1.1Модель обработки событий
Java 1.1 является достаточно гибкой и предоставляет пользователю ряд возможностей для структуризации/* <applet code = “Scribble2” width=200 height=200>
</applet>
*/
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Scribble2 extends Applet implements
MouseListener, MouseMotionListener {
private int last_x, last_y;
public void init() {
//
}
//
}
//
Рисуйте на здоровье (может у Вас талант) –
Scribble2.html.Рисование "каракулей" с использованием встроенных классов
Модель обработки событий
Java 1.1 разработана с учетом того, чтобы хорошо сочетаться с другой новой особенностью/* <applet code = “Scribble3” width=200 height=200>
</applet>
*/
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Scribble3 extends Applet {
int last_x, last_y;
public void init() {
//
}
});
//
});
//
g.setColor(getBackground());
g.fillRect(0, 0, getSize().width, getSize().height);
}
});
//
} }
Еще не нарисовались (может появились новые идеи) –
Scribble3.html.