Чтобы обработать события от мыши, следует реализовать интерфейсы MouseListener и MouseMotionListener. Можно было бы также реализовать интерфейс MouseWheelListener, но мы не станем здесь этого делать.
Весь процесс обработки событий от мыши демонстрируется в приведенном ниже примере аплета. В строке состояния окна этого аплета выводятся текущие координаты мыши.
Всякий раз, когда нажимается кнопка мыши, на месте курсора мыши появляется слово «Down»(Нажато). И всякий раз, когда кнопка мыши отпускается, слово «Up» (Отпущено) . А если производится щелчок кнопкой мыши, то в левом верхнем углу области отображения аплета выводится сообщение «Mouseclicked» (Произведен щелчок кнопкой мыши ).
Когда же курсор мыши наводится на окно аплета или отводится от него, то в левом верхнем углу области отображения аплета также выводится соответствующее сообщение. При перетаскивании курсора мыши выводится символ *, сопровождающий курсор мыши.
Обратите внимание на то, что в двух переменных, mouseX и mouseY, сохраняются координаты местоположения курсора мыши, когда происходят события нажатия и отпускания кнопки мыши, а также события перетаскивания. Эти координаты затем используются методом paint() для вывода соответствующего сообщения в той точке, где возникает событие.
Собственно весь код нашей программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
// Продемонстрировать обработчики событий от мыши 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.
Рис. 1. Пример выполнения аплета, в котором обрабатываются события мыши
Рассмотрим данный пример аплета более подробно. В частности, класс MouseEvents расширяет класс Applet и реализует интерфейсы MouseListener и MouseMotionListener.
Оба эти интерфейса содержат методы, принимающие и обрабатывающие различные типы событий от мыши. Обратите внимание на то, что аплет одновременно является источником и приемником этих событий. И это вполне допустимо, поскольку класс Component, предоставляющий методы addMouseListener() и addMouseMotionListener(), служит суперклассом для класса Аррlеt. Вообще, использование одного и того же объекта в качестве источника и приемника событий характерно для аплетов.
Заказать дешевую рекламу с видимым результатом в Одноклассниках теперь стало еще проще. Вам больше не придется выделять огромный бюджет на очередную кампанию, настраивать ее и тестировать — Вы получаете все, что нужно для развития в соцсети в одном пакетном предложении по очень низкой цене. Здесь доступны и подписчики, и друзья, и классы, и прочие ресурсы — торопитесь, пока на сайте действуют скидки.
В методе init() аплет регистрирует себя в качестве приемника событий от мыши. Это делается с помощью методов addMouseListener() и addMouseMotionListener(), которые, как упоминалось ранее, являются членами класса Component. Ниже приведены общие формы этих методов:
1 2 |
void addМouseListener(MouseListener ml) void addМouseМotionListener(MouseMotionListener mml) |
Здесь параметр ml обозначает ссылку на объект, принимающий события от мыши, а параметр mml ссылку на объект, принимающий события перемещения мыши. В рассматриваемом здесь примере аплета оба эти метода принимают в качестве параметра один и тот же объект.
Далее в данном примере аплета реализуются все методы, определенные в интерфейсах MouseListener и MouseMotionListener, т.е. обработчики разных событий от мыши. Каждый из них обрабатывает свое событие, а затем возвращает управление.