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

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

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

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

Назад Вперед

4.7. Аплет JDK 1.0 и мышь

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

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

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

Демонстрация
(ваш браузер должен уметь работать с аплетами Java)

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

Для обеспечения совместимости со старыми браузерами, не способными работать с аплетами JDK версии 1.1, вы можете использовать метод обработки событий от мыши, принятый в JDK версии 1.0.

Для этого в главном классе аплета нужно определить некоторые из перечисленных ниже методов (выбрав их в соответствии с логикой работы вашего приложения):

Метод Действие пользователя, в результате которого метод получает управление
mouseDown Нажатие на клавишу мыши, когда курсор расположен в окне аплета
mouseUp То же, но отжатие
mouseEnter Курсор вошел в область окна аплета
mouseExit Курсор вышел из этой области
mouseMove Перемещение курсора мыши
mouseDrag Операция переноса объектов: пользователь нажимает клавишу мыши, перемещает курсор и затем отпускает клавишу мыши

Всем перечисленным выше методам передается ссылка на объект-событие, а также координаты курсора на момент возникновения события, например:

public boolean mouseEnter(Event e, 
  int x, int y)
{
  return true;
}

Для нас интересны два поля объекта-события. Это поле clickCount и modifiers.

Первое из них содержит количество щелчков и может быть использовано для того чтобы отличить одиночные щелчки от двойных или тройных.

Поле modifiers позволяет узнать, какая из клавиш двухклавишной мыши вызвала появление события. Если в этом поле находится значение Event.META_MASK - то это правая клавиша, а если Event.ALT_MASK - левая.

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

Окно нашего аплета реагирует на одиночные и двойные щелчки, отделяя при этом щелчки левой и правой клавишей мыши.

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

pic1.gif (7516 bytes)

Рис. 1. Окно аплета с изображенными в нем дискетами различного размера

Если сделан двойной щелчок левой клавишей мыши, рисуется большая дискета. Щелчок правой клавишей мыши стирает все нарисованные дискеты.

Рассмотрим исходный текст аплета.

Класс PutDisk

В главном классе аплета PutDisk мы определили четыре поля и несколько методов:

import java.applet.Applet;
import java.awt.*;

public class PutDisk extends Applet
{
  Image imFloppy;
  int imHeight;
  int imWidth;
  Dimension dm;
  . . .
}

Поле imFloppy хранит ссылку на изображение дискеты, поля imHeight и imWidth - размеры этого изображения, а поле dm - размеры окна аплета.

Метод init

Прежде всего метод init загружает изображение дискеты, дожидаясь завершения процесса загрузки с помощью класса MediaTracker:

MediaTracker tr = new MediaTracker(this);
    
imFloppy = getImage(getCodeBase(),
  "disk.gif");
tr.addImage(imFloppy, 0);
try
{
  tr.waitForAll();
}
catch (InterruptedException e) {}

Затем он определяет и сохраняет размеры изображения:

imHeight = imFloppy.getHeight(this);
imWidth = imFloppy.getWidth(this);

Далее метод init определяет и сохраняет размеры окна аплета:

dm = size();

В заключение метод init устанавливает цвет фона и изображения:

setBackground(Color.white);
setForeground(Color.black);

Метод paint

Этот метод просто рисует рамку вокруг окна аплета:

public void paint(Graphics g)
{
  g.drawRect(0, 0, 
    dm.width - 1, dm.height - 1);
}

Метод mouseDown

Когда пользователь делает в окне аплета одиночный или двойной щелчок клавишей мыши, управление передается методу mouseDown.

Так как этот метод будет рисовать в окне аплета, он прежде всего получает контекст отображения:

Graphics g = getGraphics();

Далее если был сделан двойной щелчок, метод рисует изображение дискеты двойного размера:

if(e.clickCount > 1)
{
  g.drawImage(imFloppy, x, y, 
    imWidth * 2, imHeight * 2, this);
}

Если был сделан щелчок правой клавишей мыши, окно аплета перерисовывается, в результате чего нарисованные там ранее дискеты исчезают:

else if(e.modifiers == Event.META_MASK)
{
  repaint();
}

И, наконец, в случае одиночного щелчка левой клавишей мыши рисуется маленькое изображение дискеты:

else
  g.drawImage(imFloppy, x, y, this);

Сделав свою работу, метод mouseDown возвращает значение true - признак того, что обработка события была произведена:

return true;

Методы mouseEnter и mouseExit

Хотя в нашем приложении эти методы не нужны и вы можете их не определять, мы включили исходный текст соответствующих заглушек для примера:

public boolean mouseEnter(Event e, 
  int x, int y)
{
  return true;
}

public boolean mouseExit(Event e, 
  int x, int y)
{
  return true;
}

Назад Вперед

[Назад]