Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Пишущие Слушатели События
Раздел: Реализующие Слушатели для Обычно Обрабатываемых Событий
Как Записать Слушателю Движения мыши
Домашняя страница > Создание GUI С JFC/Swing > Пишущие Слушатели События

Как Записать Слушателю Движения мыши

События движения мыши уведомляют, когда пользователь использует мышь (или подобное устройство ввода данных), чтобы переместить экранный курсор. Для получения информации о прислушивании к другим видам событий от нажатия мыши, таким как щелчки, видят, Как Записать Слушателю Мыши. Для получения информации о прислушивании к событиям колеса мыши см., Как Записать Слушателю Колеса Мыши.

Если приложение требует обнаружения обоих событий от нажатия мыши и событий движения мыши, используйте MouseInputAdapter class, который реализует MouseInputListener удобный интерфейс, который реализует обоих MouseListener и MouseMotionListener интерфейсы.

Альтернативно, используйте соответствие MouseAdapter class AWT, который реализует MouseMotionListener интерфейс, чтобы создать a MouseMotionEvent и переопределите методы для определенных событий.

Следующий демонстрационный код содержит слушателя движения мыши. Этот демонстрационный пример является точно тем же самым как демонстрационным примером, описанным в, Как Записать раздел Слушателя Мыши, за исключением замены MouseMotionListener интерфейс для MouseListener интерфейс. Дополнительно, MouseMotionEventDemo реализует mouseDragged и mouseMoved методы вместо методов слушателя мыши, и дисплеи координируют вместо чисел щелчков.

Снимок экрана MouseMotionEventDemo

Попробуйте это: 
  1. Нажмите кнопку Launch, чтобы работать, MouseMotionEventDemo, используя Сеть Java™ Запускаются (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.Запускает приложение MouseMotionEventDemo
  2. Переместите курсор в желтый прямоугольник наверху окна.
    Вы будете видеть один или более перемещенные в мышь события.
  3. Нажмите и удержите кнопку мыши, и затем переместите мышь так, чтобы курсор был вне желтого прямоугольника.
    Вы будете видеть перетащенные мышью события.

Можно найти код демонстрационного примера в MouseMotionEventDemo.java и BlankArea.java. Следующий фрагмент кода от MouseMotionEventDemo реализует обработку событий движения мыши:

public class MouseMotionEventDemo extends JPanel 
                                  implements MouseMotionListener {
    //...in initialization code:
        //Register for mouse events on blankArea and panel.
        blankArea.addMouseMotionListener(this);
        addMouseMotionListener(this);
        ...
    }

    public void mouseMoved(MouseEvent e) {
       saySomething("Mouse moved", e);
    }

    public void mouseDragged(MouseEvent e) {
       saySomething("Mouse dragged", e);
    }

    void saySomething(String eventDescription, MouseEvent e) {
        textArea.append(eventDescription 
                        + " (" + e.getX() + "," + e.getY() + ")"
                        + " detected on "
                        + e.getComponent().getClass().getName()
                        + newline);
    }
}

Пример SelectionDemo, тянет прямоугольник, иллюстрирующий текущее перетаскивание пользователя. Чтобы потянуть прямоугольник, приложение должно реализовать обработчик событий для трех видов событий от нажатия мыши: щелчки мышью, мышь перетаскивает, и выпуски мыши. Чтобы быть информированным обо всех этих событиях, обработчик должен реализовать обоих MouseListener и MouseMotionListener интерфейсы, и быть зарегистрированным и как слушатель мыши и как слушатель движения мыши. Чтобы избежать иметь необходимость определить пустые методы, обработчик не реализует ни один интерфейс слушателя непосредственно. Вместо этого это расширяется MouseInputAdapter, как следующие шоу фрагмента кода.

...//where initialization occurs:
    MyListener myListener = new MyListener();
    addMouseListener(myListener);
    addMouseMotionListener(myListener);
...
private class MyListener extends MouseInputAdapter {
    public void mousePressed(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        currentRect = new Rectangle(x, y, 0, 0);
        updateDrawableRect(getWidth(), getHeight());
        repaint();
    }

    public void mouseDragged(MouseEvent e) {
        updateSize(e);
    }

    public void mouseReleased(MouseEvent e) {
        updateSize(e);
    }

    void updateSize(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        currentRect.setSize(x - currentRect.x,
                            y - currentRect.y);
        updateDrawableRect(getWidth(), getHeight());
        Rectangle totalRepaint = rectToDraw.union(previouseRectDrawn); 
        repaint(totalRepaint.x, totalRepaint.y,
                totalRepaint.width, totalRepaint.height);
    }
}

API Слушателя Движения мыши

Интерфейс MouseMotionListener

Соответствующие классы адаптера MouseMotionAdapter и MouseAdapter.

Метод Цель
mouseDragged (MouseEvent) Вызванный в ответ на пользователя, перемещающего мышь, удерживая кнопку мыши вниз. Это событие запускается компонентом, который запустил новое нажатое мышью событие, даже если курсор больше не по тому компоненту.
mouseMoved (MouseEvent) Вызванный в ответ на пользователя, перемещающего мышь без кнопок мыши, нажал. Это событие запускается компонентом, это в настоящий момент находится под курсором.

У каждого метода события движения мыши есть единственный параметр ⠀”, и его не вызывают MouseMotionEvent! Вместо этого каждый метод события движения мыши использует a MouseEvent параметр. См. API MouseEvent для информации об использовании MouseEvent объекты.

Примеры То Движение мыши Использования Слушатели

Следующая таблица приводит примеры то движение мыши использования слушатели.

Пример Где Описано Примечания
MouseMotionEventDemo Этот раздел Отчеты все события движения мыши, которые происходят в пределах глухой панели, чтобы демонстрировать обстоятельства, при которых запускаются события движения мыши.
LayeredPaneDemo и
LayeredPaneDemo2
Как Использовать Многоуровневые Области Перемещает изображение Герцога вокруг в пределах многоуровневой области в ответ на события движения мыши.
SelectionDemo   Позволяет пользователю перетаскивать прямоугольник, чтобы выбрать часть изображения. Использует подкласс MouseInputAdapter слушать оба события от нажатия мыши и события движения мыши.
GlassPaneDemo Как Использовать Корневые Области Использует подкласс MouseInputAdapter слушать события от нажатия мыши и события движения мыши на стеклянной области корневой области. Повторно диспетчеризирует события базовым компонентам.
ScrollDemo Как Использовать Области прокрутки Подкласс метки, ScrollablePicture, использует слушателя движения мыши, чтобы позволить пользователю прокручивать изображение, даже когда пользователь перетаскивает курсор за окном.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Как Записать Слушателю Мыши
Следующая страница: Как Записать Слушателю Колеса мыши