Для обработки событий мыши (mouse-события) нужно реализовать интерфейсы MouseListener и MouseMotionListener. Следующий аплет представляет этот процесс. Он отображает текущие координаты мыши в окне состояния аплета. Каждый раз, когда кнопка нажимается, в месте расположения указателя отображается слово "Down". Каждый раз, когда кнопка отпускается, показывается слово "Up". Если произведен щелчок кнопкой мыши, в левом верхнем углу области показа аплета выводится сообщение "Mouse clicked".
Когда указатель мыши входит или выходит из окна аплета, в левом верхнем углу области аплета выводится сообщение "Mouse entered". При перетаскивании мыши показывается символ *, который отслеживает указатель мыши. Обратите внимание, что две переменные, mouseX и mouseY, хранят положение курсора мыши, когда происходят события нажатия, освобождения кнопки или перетаскивания мыши. Эти координаты затем используются методом paint(), чтобы отобразить вывод в той точке, где эти события происходят.
// Демонстрирует обработчики событий мыши.
|
|
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
/*
<applet code="MouseEvents" width=300 height=100>
</applet>
*/
public class MouseEvents extends Applet
implements MouseListener, MouseMotionListener {
String msg = "";
int mouseX = 0, mouseY =0; // координаты мыши
public void init() {
addMouseListener(this); // регистрация (себя) как блока
// прослушивания mouse-событий
addMouseMotionListener(this); // регистрация (себя) как блока
}
// прослушивания MouseMotion-событий
// Обработка щелчка мыши.
public void mouseClicked(MouseEvent me) {
mouseX = 0; mouseY = 10;
msg = "Mouse clicked.";
repaint();
}
// Обработка ввода мыши в область окна.
public void mouseEntered(MouseEvent me) {
// сохранить координаты
mouseX = 0;
mouseY = 10;
msg = "Mouse entered.";
repaint();
}
// Обработка вывода мыши из области окна.
public void mouseExited(MouseEvent me) {
// сохранить координаты
mouseX = 0;
mouseY = 10;
msg = "Mouse exited.";
repaint();
}
// Обработка нажатия кнопки.
public void mousePressed(MouseEvent me) {
// сохранить координаты
mouseX = me.getX();
mouseY = me.getY();
msg = "Down";
repaint();
}
// Обработка освобождения кнопки.
public void mouseReleased(MouseEvent me) {
// сохранить координаты
mouseX = me.getX();
mouseY = me.getY();
msg = "Up";
repaint();
}
// Обработка перетаскивания мыши.
public void mouseDragged(MouseEvent me) {
// сохранить координаты
mouseX = me.getX();
mouseY = me.getY ();
msg = "*";
showStatus("Dragging mouse at " + mouseX + ", " + mouseY);
repaint();
}
// Обработка перемещения мыши.
public void mouseMoved(MouseEvent me) {
// отобразить состояние
showStatus("Moving mouse at " + me.getX() + ", " + me.getY());
}
// Вывести msg в окне апплета в положении (х, у)-координат.
public void paint(Graphics g) {
g.drawString(msg, mouseX, mouseY); }
}
Рассмотрим этот пример подробнее. Класс MouseEvents расширяет Applet и реализует как интерфейс MouseMotionListener, так и интерфейс MouseListener. Оба интерфейса содержат методы, которые принимают и обрабатывают различные типы событий мыши. Обратите внимание, что апплет является как источником, так и блоком прослушивания для этих событий (это общая ситуация для любых апплетов), т.к. Component, который обеспечивает методы addMouseListener() и addMouseMotionListener(), является суперклассом для Applet.
|
|
Внутри init() аплет регистрирует сам себя как блок прослушивания событий мыши. Это организуется с помощью методов addMouseListener() и addMouseMotionListener(), которые являются членами классаComponent:
synchronized void addMouseListener(MouseListener ml)
synchronized void addMouseMotionListener(MouseMotionListener mml)
где ml — ссылка на объект, принимающий событие мыши; mml — ссылка на объект, принимающий события движения мыши. В. этой программе для обеих ссылок используется один и тот же объект.
Затем аплет реализует все методы, определенные интерфейсами MouseMotionListener и MouseListener. Ониявляются обработчиками для различных событий мыши. Каждый метод обрабатывает свое событие и затем возвращает управление.