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)
Май 2024 (1)
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)

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

Друзья сайта



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

Blair P. Houghton:

"По моему эгоистическому мнению, большинство программ на C должны быть отформатированы с отступами на 2 метра вниз и засыпанными землей."

Опрос

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

Winamp
Light Alloy
foobar2000
Apollo
AIMP
1by1
iTunes
jetAudio
Другой...