Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Интерфейс MouseListener и обработка событий от мыши.

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

Слушатель событий от мыши должен реализовать интерфейс MouseListener. В этом интерфейсе перечислены следующие методы:

· public voidmouseClicked(MouseEventevent) — выполнен щелчок мышкой на наблюдаемом объекте

· public voidmouseEntered(MouseEventevent) — курсор мыши вошел в область наблюдаемого объекта

· public voidmouseExited(MouseEventevent) — курсор мыши вышел из области наблюдаемого объекта

· public voidmousePressed(MouseEventevent) — кнопка мыши нажата в момент, когда курсор находится над наблюдаемым объектом

· public voidmouseReleased(MouseEventevent) — кнопка мыши отпущена в момент, когда курсор находится над наблюдаемым объектом

Чтобы обработать нажатие на кнопку, требуется описать класс, реализующий интерфейс MouseListener. Далее необходимо создать объект этого класса и зарегистрировать его как слушателя интересующей нас кнопки. Для регистрации слушателя используется метод addMouseListener().

Опишем класс слушателя в пределах класса окна SimpleWindow, после конструктора. Обработчик события будет проверять, ввел ли пользователь логин «Иван» и выводить сообщение об успехе или неуспехе входа в систему:

classMouseL implements MouseListener {   public void mouseClicked(MouseEvent event) { if (loginField.getText().equals("Иван")) JOptionPane.showMessageDialog(null, "Входвыполнен"); else JOptionPane.showMessageDialog(null, "Вход НЕ выполнен"); }   public void mouseEntered(MouseEvent event) {}   public void mouseExited(MouseEvent event) {}   public void mousePressed(MouseEvent event) {}   public void mouseReleased(MouseEvent event) {}   }

 

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

ok.addMouseListener(new MouseL());

Это можно сделать сразу после команды:

JButton ok = new JButton("OK");

Создание слушателей с помощью анонимных классов

Чтобы кнопка ok обрела слушателя, который будет обрабатывать нажатие на нее, нам понадобилось описать новый (вложенный) класс. Иногда вместо вложенного класса можно обойтись анонимным. Анонимный класс не имеет имени и в программе может быть создан только один объект этого класса (создание которого совмещено с определением класса). Но очень частослушатель пишется для того, чтобы обрабатывать события единственного объекта — в нашем случае кнопки ok, а значит, используется в программе только однажды: во время привязки к этому объекту. Таким образом, мы можем заменить вложенный класс анонимным. Для этого описание класса MouseL можно просто удалить, а команду

ok.addMouseListener(new MouseL());

заменитьна:

ok.addMouseListener(new MouseListener() {   public void mouseClicked(MouseEvent event) { if (loginField.getText().equals("Иван")) JOptionPane.showMessageDialog(null, "Входвыполнен"); elseJOptionPane.showMessageDialog(null, "ВходНЕвыполнен"); } public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {} public void mousePressed(MouseEvent event) {} public void mouseReleased(MouseEvent event) {}   });

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

Класс MouseAdapter

Программа стала выглядеть загроможденной главным образом из-за того, что помимо полезного для нас метода mouseClicked()пришлось определять пустые реализации всех остальных, не нужных методов. Но этого можно избежать.

Класс MouseAdapter реализует интерфейс MouseListener, определяя пустые реализации для каждого из его методов. Можно унаследовать своего слушателя от этого класса и переопределить те методы, которые нам нужны.

В результате предыдущее описание слушателя будет выглядеть более компактно:

ok.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent event) { if (loginField.getText().equals("Иван")) JOptionPane.showMessageDialog(null, "Входвыполнен"); elseJOptionPane.showMessageDialog(null, "ВходНЕвыполнен"); } });

 



<== предыдущая лекция | следующая лекция ==>
Создание програм с графическим интерфейсом пользователя на Java | Общая структура слушателей
Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 274 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Либо вы управляете вашим днем, либо день управляет вами. © Джим Рон
==> читать все изречения...

4315 - | 4035 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.