Создание слушателей с помощью анонимных классов
Чтобы кнопка «ok» обрела слушателя, который будет обрабатывать нажатие на нее, нам понадобилось описать новый (вложенный) класс. Иногда вместо вложенного класса можно обойтись анонимным. Анонимный класс не имеет имени и в программе может быть создан только один объект этого класса (создание которого совмещено с определением класса). Но очень часто, как и в примере, слушатель пишется для того, чтобы обрабатывать события единственного объекта, например, кнопки «ok», а значит, используется в программе только однажды: во время привязки к этому объекту. Таким образом, можно заменить вложенный класс анонимным. Для этого описание класса MouseL можно просто удалить, а команду
ok.addMouseListener(new MouseL());
заменить на:
ok.addMouseListener(new 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) {}
});
Новый вариант выглядит более громоздко, чем первый. Злоупотребление анонимными классами может сделать программу плохо читаемой. Однако в результате все действия с кнопкой (создание, настройка ее внешнего вида и команды обработки щелчка по ней) не разнесены, как в случае вложенных классов, а находятся рядом, что облегчает сопровождение (внесение изменений) программы. В случае простых (в несколько строк) обработчиков разумно делать выбор в пользу анонимных классов.
Реализовать интерфейс слушателя можно в любом классе, добавив к его описанию директиву implements MouseListener и определив в нем необходимые методы. В частности, это может быть сам класс окна SimpleWindow. Но чаще всего пользуются анонимными и вложенными классами (не в последнюю очередь благодаря наличию адаптеров.
Класс MouseAdapter
Необходимость определять кроме необходимых методов пустые реализации всех остальных методов можно избежать.
Класс MouseAdapter реализует интерфейс MouseListener, определяя пустые реализации для каждого из его методов. Можно унаследовать своего слушателя от этого класса и переопределить те методы, которые нужны.
В результате предыдущее описание слушателя будет выглядеть более компактно:
ok.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent event) {
if (loginField.getText().equals("Иван"))
JOptionPane.showMessageDialog(null, "Вход выполнен");
else
JOptionPane.showMessageDialog(null, "Вход НЕ выполнен");
}
});
Дата добавления: 2017-01-26; просмотров: 1563;