Механизм обработки событий Java
В Java есть 3 роли для участников механизма событий:
1. Объект Event: объект состояния события, используемый в соответствующих методах слушателя, в качестве параметров, как правило, существует в методе слушателя.
2. Справочник: конкретный источник события. Например, если вы нажимаете на кнопку, кнопка является источником события. Если вы хотите, чтобы кнопка ответила на определенные события, вам нужно зарегистрировать конкретного слушателя.
3. Слушатель: Определите четкий метод Java соответственно для возникновения каждого ясного события. Эти методы определяются централизованно в интерфейсе слушателя событий (EventListener), который должен унаследовать java.util.eventlistener. Класс, который реализует некоторые или все методы в интерфейсе слушателя событий, является слушателем событий.
По мере появления событий соответствующее состояние обычно инкапсулируется в объекте состояния события, который должен быть унаследован от java.util.eventobject. Объект состояния события передается как единый параметр методу слушателя, который должен отвечать на событие. Идентификация источника события, который выдает конкретное событие: определяет метод регистрации для слушателя событий в соответствии с указанным форматом проектирования и принимает ссылки на указанный экземпляр интерфейса прослушивателя событий.
Для конкретного класса событий прослушивания, когда он слушает объект события, он вызывает соответствующий метод и обрабатывает его.
Давайте посмотрим на пакет мероприятий, предоставленный JDK:
Общедоступный интерфейс EventListener: интерфейс тега, который должен быть расширен все интерфейсы прослушивателя событий.
Общедоступный класс EventObject расширяет объектные реализации сериализуемых
Все объекты состояния события получат класс корня, из которого они есть. Все события ссылаются на объект «Источник» при построении, который логически считается объектом, который первоначально возникает в отношении события.
(1) Создайте класс DooRevent через файл doorevent.java, который наследует EventObject.
/*** Чтобы определить объект события, вы должны унаследовать EventObject*/public Class Doorevent Evends EventObject {Private Static Long Long SerialVersionUID = 6496098798146410884L; Private String DoorState = ""; // Указывает состояние двери, существует два типа публичных Doorevent (источник объекта, струнный дверный город) {super (Source); this.doorstate = дверные жилы; } public void setDoorState (String DoorState) {this.doorstate = DoorState; } public String getDoorState () {return this.doorstate; }}(2) определить новый интерфейс прослушивания событий, который унаследован от EventListener; Этот интерфейс содержит обработчик для событий Doorevent:
/*** Определите интерфейс прослушивания, ответственный за прослушивание событий Dootevent*/public interface Doorlistener EventListener {public void doorevent (событие DooreVent);}Через вышеуказанный интерфейс мы определяем классы прослушивания событий, которые специально реализуют функцию функции слушания и обработку событий.
/*** Этот класс реализует интерфейс прослушивания дверей 1 и выполняет конкретные действия открытия и закрытия двери*/открытый класс дверной списк1, реализует дверь, {@override public void doorevent (doorevent event) {// todo Auto Generated Method Stub if (event.getdoorstate ()! = Null && Event.getDoorState (). System.out.println ("Door1 Open"); } else {System.out.println ("Door1 закрыт"); }}}/*** Этот класс реализует интерфейс прослушивания двери 2, который выполняет конкретное открытие двери, закрытие двери, а также открытие света и закрытие света*/Общедоступный класс DoorListener2 Реализует дверной список {@Override public void doorevent (doorevent event) {// todo Автогенерированный метод STUB event.getDoorState (). equals ("open")) {System.out.println ("дверь2 открывается, включив свет в коридоре одновременно"); } else {System.out.println ("Door2 закрывается, включив свет в коридоре одновременно"); }}}(3) Создайте класс источника событий через DORMANAGER.JAVA, который использует объект для слушателей коллекции для хранения всех объектов слушателя событий. Метод хранения через adddoorlistener (..). notifylisteners (..) - это метод, который запускает событие, которое используется для уведомления системы: событие произошло, и вы можете вызвать соответствующую функцию обработки.
/*** Объект источника событий, здесь вы можете представить его как пульт дистанционного управления, который управляет открытием и закрытием двери,*(если он в качелях, он похож на кнопку)*/Public Class Bootormanager {Private Collection Hellocers; / ** * Добавить событие * * @param слушатель * doorlistener */ public void adddoorlistener (прослушивание дверей) {if (слушатели == null) {слушатели = new hashset (); } слушатели.адд (слушатель); } / ** * Удалить событие * * @param слушатель * doorlistener * / public void lementoarlistener (прослушивание дверей) {if (слушатели == null) return; Слушатели. РЕМОВА (Слушатель); } / *** запустить событие открытия двери* / Защищенный void fireworkspaceopened () {if (слушатели == null) return; DOOREVENT EVENT = NEW DOOREVENT (это, "OPEN"); notifylisteners (событие); } / *** запустить событие закрытия двери* / Защищенный void fireworkspaceclosed () {if (слушатели == null) return; DOOREVENT EVENT = NEW DOOREVENT (это, "Close"); notifylisteners (событие); } / ** * Уведомление всех дверей listeners * / private void notifylisteners (doorevent event) {iterator iter = слушатель.iterator (); while (iter.hasnext ()) {doorlistener alluster = (doorlistener) iter.next (); Слушатель.duorevent (Event); }}}(4) Хорошо, наконец, напишите тестовую программу, чтобы проверить наши индивидуальные события. Эта программа не должна быть сложной для понимания :)
/*** Основная программа предполагается как кто хочет открыть дверь*/Общедоступный класс коврика {public static void main (string [] args) {Dipormanager Manager = new Bootormanager (); Manager.adddoorlistener (new Doorlistenerer1 ()); // Добавить слушателя в дверь 1 Manager.adddoorlistener (new Doorlistener2 ()); // Добавить слушателя в дверь 2 // Открытая дверь. System.out.println («Я пришел»); // Close Manager.fireWorksPaceClosed (); }}Запустить швейцар
Дверь 1 открывает дверь 2 открывается, открывая свет в коридоре
Я вошел
Дверь 1 закрывается дверь 2 закрывается при закрытии огней коридора
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!