Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Коды клавиш

Ввод символов
Аплеты JDK 1.1 и клавиатура
Аплет JDK 1.0 и клавиатура
Мышь в JDK 1.1
Перемещение объектов
Аплет JDK 1.0 и мышь
Регулируем размер изображения
Автономное приложение и мышь

Назад

4.9. Автономное приложение и мышь

Пример демонстрирует способы обработки событий, возникающих при перемещении курсора мыши в модели JDK версии 1.0.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

Так же как и аплеты, автономные приложения Java, создающие окна на базе класса Frame,  могут обрабатывать события, создаваемые мышью.

Чтобы реализовать данную возможность, класс указанных выше окон должен реализовывать интерфейсы MouseListener и MouseMotionListener (оба или один из них в зависимости от логики работы приложения).

Описание примера

Если делать щелчки различными клавишами мыши в окне автономного приложения, исходные тексты которого приведены в этом разделе, то около курсора будут отображаться его координаты и название клавиши (рис. 1).

pic1.gif (2839 bytes)

Рис. 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());

Назад

[Назад]