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г.
А) В строке объявления класса добавляем, например:
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г.