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

Как Записать Слушателю Мыши

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

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

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

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

Альтернативно, используйте соответствующий AWT MouseAdapter class, который реализует MouseListener, MouseMotionListener, и MouseWheelListener интерфейсы.

Следующий пример показывает слушателю мыши. Наверху окна пустая область (реализованный названным class BlankArea). Слушатель мыши прислушивается к событиям оба на BlankArea и на его контейнере, экземпляре MouseEventDemo. Каждый раз, когда событие от нажатия мыши происходит, дескриптивное сообщение выводится на экран под пустой областью. Перемещая курсор сверху пустой области и иногда нажимая кнопки мыши, можно запустить события от нажатия мыши.

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

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

Можно найти код демонстрационного примера в MouseEventDemo.java и BlankArea.java. Вот код обработки события от нажатия мыши демонстрационного примера:

public class MouseEventDemo ... implements MouseListener {
        //where initialization occurs:
        //Register for mouse events on blankArea and the panel.
        blankArea.addMouseListener(this);
        addMouseListener(this);
    ...

    public void mousePressed(MouseEvent e) {
       saySomething("Mouse pressed; # of clicks: "
                    + e.getClickCount(), e);
    }

    public void mouseReleased(MouseEvent e) {
       saySomething("Mouse released; # of clicks: "
                    + e.getClickCount(), e);
    }

    public void mouseEntered(MouseEvent e) {
       saySomething("Mouse entered", e);
    }

    public void mouseExited(MouseEvent e) {
       saySomething("Mouse exited", e);
    }

    public void mouseClicked(MouseEvent e) {
       saySomething("Mouse clicked (# of clicks: "
                    + e.getClickCount() + ")", e);
    }

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

API Слушателя Мыши

Интерфейс MouseListener

Метод Цель
mouseClicked (MouseEvent) Вызванный сразу после того, как пользователь щелкает по слушаемому компонент.
mouseEntered (MouseEvent) Вызванный сразу после того, как курсор вводит границы слушаемого компонент.
mouseExited (MouseEvent) Вызванный сразу после того, как курсор выходит из границ слушаемого компонент.
mousePressed (MouseEvent) Вызванный сразу после того, как пользователь нажимает кнопку мыши, в то время как курсор является по слушаемому компонентом.
mouseReleased (MouseEvent) Вызванный сразу после того, как пользователь отпускает кнопку мыши после щелчка мышью по слушаемому компонент.

MouseAdapter class (адаптер AWT class) абстрактен. У всех его методов есть пустое тело. Таким образом, разработчик может определить методы для событий, определенных для приложения. Можно также использовать MouseInputAdapter class, который имеет все методы в наличии от MouseListener и MouseMotionListener.

Класс MouseEvent

Метод Цель
интервал getClickCount () Возвращает число быстрых, последовательных щелчков, которые пользователь сделал (включая это событие). Например, возвраты 2 для двойного щелчка.
интервал getX ()
интервал getY ()
Укажите на getPoint ()
Возвратитесь (x, y) позиция, в которой событие имело место относительно компонента, который запустил событие.
интервал getXOnScreen ()
интервал getYOnScreen ()
интервал getLocationOnScreen ()
Возвратите абсолют (x, y) позиция события. Эти координаты относительно виртуальной системы координат для многоэкранной среды. Иначе, эти координаты относительно системы координат, связанной с Графической Конфигурацией Компонента.
интервал getButton () Возвраты, у какой кнопки мыши, если таковые вообще имеются, есть измененное состояние. Одна из следующих констант возвращается: NOBUTTON, BUTTON1, BUTTON2, или BUTTON3. Представленный в выпуске 1.4.
булев isPopupTrigger () Возвраты true если событие от нажатия мыши должно заставить раскрывающееся меню появляться. Поскольку раскрывающиеся триггеры являются зависимой платформой, если Ваша программа использует раскрывающиеся меню, следует вызвать isPopupTrigger для всех нажатых мышью и выпущенных от мыши событий, запущенных компонентами, по которым может появиться раскрывающееся. См. Перевод в рабочее состояние Раскрывающегося Меню для получения дополнительной информации о раскрывающихся меню.
Представьте getMouseModifiersText в виде строки (интервал) Возвраты a String описывая модифицирующие клавиши и кнопки мыши, которые были активными во время события, такими как "Сдвиг", или "Ctrl+Shift". Эти строки могут быть локализованы, используя awt.properties файл. Представленный в выпуске 1.4.

Класс InputEvent

MouseEvent class наследовал много полезных методов от InputEvent и пары удобных методов от ComponentEvent и AWTEvent классы.

Метод Цель
интервал getID ()
(в java.awt.AWTEvent)
Возвращает тип события, который определяет определенное действие. Например, идентификатор MouseEvent отражает состояние кнопок мыши для каждого события от нажатия мыши. Следующие состояния могли быть определены идентификатором MouseEvent: MouseEvent.MOUSE_PRESSED, MouseEvent.MOUSE_RELEASED, и MouseEvent.MOUSE_CLICKED.
Компонент getComponent ()
(в ComponentEvent)
Возвращает компонент, который запустил событие. Можно использовать этот метод вместо getSource метод.
интервал getWhen () Возвращает метку времени того, когда это событие имело место. Чем выше метка времени, тем позже событие имело место.
булев isAltDown ()
булев isControlDown ()
булев isMetaDown ()
булев isShiftDown ()
Возвратите состояние отдельных модифицирующих клавиш в то время, когда событие было запущено.
интервал getModifiers () Возвращает состояние всех модифицирующих клавиш и кнопок мыши, когда событие было запущено. Можно использовать этот метод, чтобы определить, какая кнопка мыши была нажата (или отпущена), когда событие от нажатия мыши было запущено. InputEvent class определяет эти константы для использования с getModifiers метод: ALT_MASK, BUTTON1_MASK, BUTTON2_MASK, BUTTON3_MASK, CTRL_MASK, META_MASK, и SHIFT_MASK. Например, следующее выражение является истиной, если правильная кнопка была нажата:
(mouseEvent.getModifiers() & InputEvent.BUTTON3_MASK)
== InputEvent.BUTTON3_MASK
интервал getModifiersEx () Возвращает расширенную маску модификатора для этого события. Расширенные модификаторы представляют состояние кнопки мыши и всех модальных ключей, таких как ALT, CTRL, МЕТА, сразу после того, как событие имело место. Можно проверить состояние модификаторов, используя одну из следующих предопределенных битовых масок: SHIFT_DOWN_MASK, CTRL_DOWN_MASK, META_DOWN_MASK, ALT_DOWN_MASK, BUTTON1_DOWN_MASK, BUTTON2_DOWN_MASK, BUTTON3_DOWN_MASK, или ALT_GRAPH_DOWN_MASK. Например, чтобы проверить, что кнопка 1 снижается, но что кнопки 2 и 3 возросли, Вы использовали бы следующий фрагмент кода:
if (event.getModifiersEx() & (BUTTON1_DOWN_MASK |
                              BUTTON2_DOWN_MASK |
                              BUTTON3_DOWN_MASK)
                               == BUTTON1_DOWN_MASK) {
    ...
}
Представленный в выпуске 1.4.
интервал getModifiersExText (интервал) Возвращает строку, описывающую расширенные модифицирующие клавиши и кнопки мыши, такие как "Сдвиг", "Button1", или "Ctrl+Shift". Эти строки могут быть локализованы, изменяя awt.properties файл. Представленный в выпуске 1.4.

Класс MouseInfo

MouseInfo class обеспечивает методы, чтобы получить информацию о расположении указателя мыши в любое время, в то время как приложение работает.

Метод Цель
getPointerInfo () Возвраты a PointerInfo экземпляр, который представляет текущее расположение указателя мыши.
getNumberOfButtons () Возвращает число кнопок на мыши или -1 , если система не поддерживает мышь.

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

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

Пример Где Описано Примечания
MouseEventDemo Этот раздел Отчеты все события от нажатия мыши, которые происходят в пределах глухой панели, чтобы демонстрировать обстоятельства, при которых запускаются события от нажатия мыши.
GlassPaneDemo Как Использовать Корневые Области Использует подкласс MouseInputAdapter слушать события от нажатия мыши и события движения мыши на стеклянной области корневой области. Повторно диспетчеризирует события базовым компонентам.
TableSortDemo Как Использовать Таблицы Слушает события от нажатия мыши на табличном заголовке. Данные видов в выбранном столбце.
PopupMenuDemo Как Использовать Меню Выводит на экран раскрывающееся меню в ответ на щелчки мышью.
TrackFocusDemo Как Использовать Подсистему Фокуса Пользовательский компонент, Picture, реализует слушателя мыши, который запрашивает фокус, когда пользователь щелкает по компоненту.

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

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