Назад
4.9. Автономное приложение и мышь
Пример демонстрирует способы обработки
событий, возникающих при перемещении курсора
мыши в модели JDK версии 1.0.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Немного теории
Так же как и аплеты, автономные приложения Java,
создающие окна на базе класса Frame, могут
обрабатывать события, создаваемые мышью.
Чтобы реализовать данную возможность, класс
указанных выше окон должен реализовывать
интерфейсы MouseListener и MouseMotionListener (оба или один из
них в зависимости от логики работы приложения).
Описание примера
Если делать щелчки различными клавишами мыши в
окне автономного приложения, исходные тексты
которого приведены в этом разделе, то около
курсора будут отображаться его координаты и
название клавиши (рис. 1).
Рис. 1. В окне автономного приложения
отображаются координаты курсорамыши и названия
нажатых клавиш
Обратите внимание на то, что координаты здесь
отсчитываются от верхнего левого угла заголовка
окна, а не от верхнего левого угла внутренней
области окна, как это можно было бы подумать.
Если сделать в окне приложения двойной щелчок
любой клавишей мыши, содержимое окна будет
стерто.
Рассмотрим кратко исходные тексты приложения.
Класс FrameWindow
Этот класс реализует интерфейс MouseListener,
необходимый для обработки событий от мыши:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
class FrameWindow extends Frame
implements MouseListener, WindowListener
{
. . .
}
Метод init класса FrameWindow
В задачу этого метода входит регистрация
нужных нам интерфейсов:
public void init()
{
this.addMouseListener(this);
this.addWindowListener(this);
}
Первый из этих интерфейсов используется для
обработки событий от мыши, а второй нужен для
завершения работы приложения при уничтожении
окна класса FrameWindow.
Метод mousePressed
Этот метод начинает работать, когда
пользователь делает щелчок внутри окна
приложения.
Прежде всего он получает контекст отображения,
в котором будут рисоваться текстовые строки с
координатами курсора мыши и с названием нажатой
клавиши:
Graphics g = getGraphics();
Далее формируется строка с координатами
курсора мыши, полученными при помощи методов getX и
getY:
String s="";
s = "[" + e.getX() + "," + e.getY() + "]";
Далее мы определяем, какая клавиша мыши была
нажата и добавляем к строке s соответствующий
текст:
int m = e.getModifiers();
switch(m)
{
case MouseEvent.BUTTON1_MASK:
{
s += " left";
break;
}
case MouseEvent.BUTTON2_MASK:
{
s += " middle";
break;
}
case MouseEvent.BUTTON3_MASK:
{
s += " right";
break;
}
}
Если пользователь сделал двойной щелчок
клавишей мыши, окно приложения перерисовывается,
а затем метод возвращает управление:
int clicks = e. getClickCount();
if(clicks > 1)
{
repaint();
return;
}
В случае же одинарного щелчка строка s
отображается в месте расположения курсора мыши:
g.drawString(s, e.getX(), e.getY());
Назад |