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

Для обработки событий мыши (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. Ониявляются обработчиками для различных событий мыши. Каждый метод обрабатывает свое событие и затем возвращает управление.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: