WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Четыре способа организации обработки событий.

Четыре способа организации обработки событий.


Дата публикации: 17-03-2013

1) Способ, когда основной класс сам исполняет интерфейс ХХХListener
А) В строке объявления класса добавляем, например:
implements ActionListener
B) В этом классе создаем соответствую-щие методы интерфейса, в которых будут обрабатываться события, например:
public void ActionPerformed(ActionEvent ae) {
//Действия по обработке события ae...
}
C) Регистрируем Listener на необходимой компоненте, например:
button1.addActionListener(this);
где button1 - экземпляр класса Button; this - указывает, что соответствующий метод-обработчик события принадлежит этому классу.

Примечание:
Если в классе используются несколько компонент, на которых зарегистрирован один и тот же Listener, то в методе-обра-ботчике события необходимо делать анализ источника события, например:

public void ActionPerformed(ActionEvent ae) {
if (ae.getSource()==button1)
{//обработкa события от button1}
if (ae.getSource()==button2)
{//обработка события от button2}
}


2) Способ, когда события обрабатываются в отдельных (внутренних или внешних) классах исполняющих интерфейс ХХХListener или наследующих соответ-ствующий XXXAdapter (если таковой есть).

А) Создаем класс-обработчик события, например:
class Handler1 implements ActionListener
(или class Handler1 extends ActionAdapter)
B) Объявляем в нем все методы интер-фейса (или только необходимые методы в случае использования адаптера), например:
public void ActionPerformed(ActionEvent ae) {
//Действия по обработке события ae...
}
С) В основном классе создаем экземпляр класса-обработчика события, например:
Handler1 h1 = new Handler1();
D) Регистрируем Listener на необходимой компоненте, например:
button1.addActionListener(h1);
где параметр h1 указывает, что метод по обработке данного события находится в объекте h1.

Примечание:
Если создавать по классу на каждый источник событий, то и анализа источников событий делать не надо.

3) Способ, когда сами компоненты-источники событий исполняют интерфейс ХХХListener
A) Создаем класс, наследующий данный компонент и исполняющий необходимый интерфейс, например:
public class MyButton extends Button implements ActionListener
B) В конструкторе этого класса регистрируем Listener, например:
public MyButton() {
super():
addActionListener(this);
}
где параметр this указывает, что метод-обработчик события следует искать в этом же классе.
С) Переопределяем нужные методы интерфейса в этом классе, например:
public void ActionPerformed(ActionEvent ae) {
//Действия по обработке события ae...
}

Примечание:
Как и в способе 2, анализа источника события в методе-обработчике не потребуется.

4) Способ явной обработки события в компоненте-источнике (т.н. Explicit Event Enabling)
A) Создаем класс, наследующий данный компонент, например:
public class MyButton extends Button

B) В его конструкторе вызываем метод enbleEvents(), передав ему в качестве параметра константу-маску того события, которое необходимо обработать, например:
public MyButton(String label) {
super(label);
enableEvents(AWTEvent.ACTION_EVENT_MASK);
}
где AWTEvent.ACTION_EVENT_MASK указывает, что обрабатываться будет именно нажатие кнопки (событие Action).
C) В этом классе переопределяем метод, который вызывает данное событие, например, в нашем случае это будет:
public void processActionEvent(ActionEvent ae) {
// Действия по обработке события ae...
super.processActionEvent(ae);
}
где последняя строка вызывает метод processActionEvent родителя

Примечание:
В отличие от других способов, этот способ гарантирует, что метод processActionEven будет вызван в первую очередь по отношению к другим Listener'ам

Андрей Дуглас 1998г.
Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)

Карта сайта: 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

Друзья сайта



Случайная цитата

Неизвестный автор:

"Как видно, совершенство достигается не тогда, когда уже нечего прибавить, но когда уже ничего нельзя отнять."

Опрос

Какой антивирус Вы используете?

Kaspersky Antivirus
NOD32
Norton Antivirus
Dr.Web
Panda
Аvast!
ClamWin
Другой...