Обработка событий от мыши Java

Обработка событий от мыши JavaЧтобы обработать события от мыши, следует реализовать интерфейсы MouseListener и MouseMotionListener. Можно было бы также реализовать ин­терфейс MouseWheelListener, но мы не станем здесь этого делать.

Весь процесс обработки событий от мыши демонстрируется в приведенном ниже примере апле­та. В строке состояния окна этого аплета выводятся текущие координаты мыши.

Всякий раз, когда нажимается кнопка мыши, на месте курсора мыши появляется слово "Down"(Нажато). И всякий раз, когда кнопка мыши отпускается, слово "Up" (Отпущено) . А если производится щелчок кнопкой мыши, то в левом верх­нем углу области отображения аплета выводится сообщение "Mouseclicked" (Произведен щелчок кнопкой мыши ).

Когда же курсор мыши наводится на окно аплета или отводится от него, то в ле­вом верхнем углу области отображения аплета также выводится соответствующее сообщение. При перетаскивании курсора мыши выводится символ *, сопровожда­ющий курсор мыши.

Обратите внимание на то, что в двух переменных, mouseX и mouseY, сохраняются координаты местоположения курсора мыши, когда проис­ходят события нажатия и отпускания кнопки мыши, а также события перетаски­вания. Эти координаты затем используются методом paint() для вывода соответ­ствующего сообщения в той точке, где возникает событие.

Собственно весь код нашей программы:

//     
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
/*
 * <applet code="MouseEvents" width=300 height=100></applet>
 */
public class MouseEvents extends Applet implements MouseListener, MouseMotionListener {
        
        String msg = "";
        int mouseX = 0, mouseY = 0; //   
        
        public void init() {
            addMouseListener(this);
            addMouseMotionListener(this);
        }
        
        //      
        public void mouseClicked(MouseEvent me) {
            //  
            mouseX = 0;
            mouseY = 10;
            msg = "Mouse clicked."; //    
            repaint();
        }
        //     
        public void mouseEntered(MouseEvent me) {
            //  
            mouseX = 0;
            mouseY = 10;
            msg = "Mouse entered."; //  
            repaint();
        }
        
        //     
        public void mouseExited(MouseEvent me) {
            //  
            mouseX = 0;
            mouseY = 10;
            msg = "Mouse exited."; //  
            repaint();
        }
        
        //     
        public void mousePressed(MouseEvent me) {
            //  
            mouseX = me.getX();
            mouseY = me.getY();
            msg = "Down"; //   
            repaint();
        }
        
        //     
        public void mouseReleased(MouseEvent me) {
            //  
            mouseX = me.getX();
            mouseY = me.getY();
            msg = "Up"; //   
            repaint();
        }
        
        //     
        public void mouseDragged(MouseEvent me) {
            //  
            mouseX = me.getX();
            mouseY = me.getY();
            msg = "*";
            showStatus("Dragging mouse at " + mouseX + ", " + mouseY);
            //        
            repaint();
        }
        
        //    
        public void mouseMoved(MouseEvent me) {
            //  
            showStatus("Moving mouse at " + me.getX() + ", " + me.getY());
            //        
        }
        
        //     msg   
        //   X, Y   
        public void paint(Graphics g) {
            g.drawString(msg, mouseX, mouseY);
        }

}

Пример выполнения данного аплета приведен на рис. 1.

 Обработка событий от мыши JavaРис. 1. Пример выполнения аплета, в котором обрабатываются события мыши

Рассмотрим данный пример аплета более подробно. В частности, класс MouseEvents расширяет класс Applet и реализует интерфейсы MouseListener и MouseMotionListener.

Оба эти интерфейса содержат методы, принимающие и обрабатывающие различные типы событий от мыши. Обратите внимание на то, что аплет одновременно является источником и приемником этих событий. И это вполне допустимо, поскольку класс Component, предоставляющий методы addMouseListener() и addMouseMotionListener(), служит суперклассом для клас­са Аррlеt. Вообще, использование одного и того же объекта в качестве источника и приемника событий характерно для аплетов.

Заказать дешевую рекламу с видимым результатом в Одноклассниках теперь стало еще проще. Вам больше не придется выделять огромный бюджет на очередную кампанию, настраивать ее и тестировать — Вы получаете все, что нужно для развития в соцсети в одном пакетном предложении по очень низкой цене. Здесь доступны и подписчики, и друзья, и классы, и прочие ресурсы — торопитесь, пока на сайте действуют скидки.

В методе init() аплет регистрирует себя в качестве приемника событий от мыши. Это делается с помощью методов addMouseListener() и addMouseMotionListener(), которые, как упоминалось ранее, являются членами класса Component. Ниже приведены общие формы этих методов:

void addouseListener(MouseListener ml)
void addouseotionListener(MouseMotionListener mml)

Здесь параметр ml обозначает ссылку на объект, принимающий события от мыши, а параметр mml ссылку на объект, принимающий события перемеще­ния мыши. В рассматриваемом здесь примере аплета оба эти метода принимают в качестве параметра один и тот же объект.

Далее в данном примере аплета реализуются все методы, определенные в интер­фейсах MouseListener и MouseMotionListener, т.е. обработчики разных событий от мыши. Каждый из них обрабатывает свое событие, а затем возвращает управление.

Комментариев 4 на “Обработка событий от мыши Java

  1. Скажите, а есть событие двойного нажатия мыши? хочу открывать форму с инфой по двойному клику в таблице

  2. Можно попробовать сделать переменную-счетчик времени, к которой в цикле после нажатия мышкой начинает прибавляться по единице и если, допустим, эта переменная дошла до 5000 и второго клика не произошло, то это не двойной клик, а если произошло, то это – двойной клик. После каждого такого цикла нужно обнулять эту переменную, а чтобы не нагружать компьютер, можно между каждой итерацией переменной сделать небольшие паузы с помощью Thread.sleep(milliseconds); и сделать количество, до которого должна дойти переменная поменьше.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *