| Назад
    Вперед 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).   
 Рис. 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;
}
 Назад Вперед |