Создание собственных событий в Java
- Автор: Silver
- Просмотров: 683
Прежде всего нужно создать класс события, наследуемый от java.util.EventObject. В нем для удобства можно реализовать несколько конструкторов. Пример такого класса:
import java.util.EventObject; public class CommandDataAvailiableEvent extends EventObject { private String message; public CommandDataAvailiableEvent(Object source, String message) { super(source); this.message = message; } public CommandDataAvailiableEvent(Object source){ this(source, ""); } public CommandDataAvailiableEvent(String s){ this(null, s); } public String getMessage(){ return message; } @Override public String toString(){ return getClass().getName() + "[source = " + getSource() + ", message = " + message + "]"; } }Далее следует определить интерфейс, который будут реализовывать все слушатели события. В интерфейсе должна быть объявлена функция, обрабатывающая событие:
public interface CommandDataAvailiableListener { public void commandDataAvailiable(CommandDataAvailiableEvent e); }В классе, генерирующему события, необходимо объявить коллекцию, в которой будут храниться ссылки на слушателей:
private ArrayList listeners = new ArrayList();А после этого добавить несколько функций для обработки списка слушателей: добавление слушателя
public void addComDataEnableEventListener(ComDataEnableEventListener listener){ listeners.add(listener); }получение массива слушателй
public ComDataEnableEventListener[] getComDataEnableEventListeners(){ return listeners.toArray(new ComDataEnableEventListener[listeners.size()]); }удаление слушателя
public void removeComDataEnableEventListener(ComDataEnableEventListener listener){ listeners.remove(listener); }генерирования события
protected void fireDataAvaliableEvent(String message){ ComDataEnableEvent ev = new ComDataEnableEvent(this, message); for (ComDataEnableEventListener listener : listeners){ listener.DataAvaliableEvent(ev); } }На этом создание события завершено. Теперь, чтобы сгенерировать событие необходимо только вызвать функцию fireDataAvaliableEvent, и уведомления будут высланы всем слушателям.