Java 이벤트 처리 메커니즘
Java의 이벤트 메커니즘에 참가자에게는 3 가지 역할이 있습니다.
1. 이벤트 객체 : 매개 변수로서 해당 리스너 방법에 사용되는 이벤트 상태 객체는 일반적으로 리스너 방법에 존재합니다.
2.EVENT 출처 : 특정 이벤트 소스. 예를 들어 버튼을 클릭하면 버튼이 이벤트 소스입니다. 버튼이 특정 이벤트에 응답하려면 특정 리스너를 등록해야합니다.
3.Event Listener : 각 명확한 이벤트의 발생에 따라 명확한 Java 메소드를 정의합니다. 이 메소드는 이벤트 리스너 (EventListener) 인터페이스에 중앙에 정의되며 Java.util.eventListener를 상속해야합니다. 이벤트 리스너 인터페이스에서 일부 또는 모든 방법을 구현하는 클래스는 이벤트 리스너입니다.
이벤트가 발생함에 따라 해당 상태는 일반적으로 이벤트 상태 객체에 캡슐화되며 java.util.eventObject에서 상속되어야합니다. 이벤트 상태 객체는 이벤트에 응답 해야하는 리스너 메소드로 단일 매개 변수로 전달됩니다. 특정 이벤트를 발행하는 이벤트 소스의 ID는 다음과 같습니다. 지정된 디자인 형식에 따라 이벤트 리스너의 등록 방법을 정의하고 지정된 이벤트 리스너 인터페이스 인스턴스에 대한 참조를 허용합니다.
특정 청취 이벤트 클래스의 경우 이벤트 객체를 듣는 경우 해당 방법을 호출하고 처리합니다.
JDK가 제공 한 이벤트 패키지를 살펴 보겠습니다.
Public Interface EventListener : 모든 이벤트 리스너 인터페이스를 확장 해야하는 태그 인터페이스.
공개 클래스 eventObject 확장 객체 구현 직렬화 가능합니다
모든 이벤트 상태 객체는 루트 클래스를 도출합니다. 모든 이벤트는 구성시 객체 "소스"를 참조하며, 이는 이벤트에 대해 처음에 발생하는 객체로 논리적으로 간주됩니다.
(1) doorevent.java 파일을 통해 Doorvent 클래스를 만듭니다.
/*** 이벤트 객체를 정의하려면 EventObject*/public class doorvent eventObject {private static final long serialversionuid = 6496098798146410884L; 개인 문자열 도어 스테이트 = ""; // 도어의 상태를 나타내고, 두 가지 유형의 공개 문서 (객체 소스, 문자열 도어 스테이트) {super (source); this.doorstate = 도어 스테이트; } public void setDoorstate (문자열 도어 스테이트) {this.doorstate = 도어 스테이트; } public String getDoorstate () {return this.doorstate; }}(2) EventListener에서 상속 된 새로운 이벤트 청취 인터페이스를 정의합니다. 이 인터페이스에는 Doorvent 이벤트를위한 핸들러가 포함되어 있습니다.
/*** Doorvent 이벤트 청취를 담당하는 청취 인터페이스 정의*/Public Interface Doorlistener Extends EventListener {public void Doorevent (Doorevent event);}.위의 인터페이스를 통해 청취 기능 및 이벤트 처리 기능을 구체적으로 구현하는 이벤트 청취 클래스를 정의합니다.
/*** This class implements the door 1 listening interface, and performs specific door opening and closing actions*/public class DoorListener1 implements DoorListener { @Override public void doorEvent(DoorEvent event) { // TODO Auto-generated method stub if (event.getDoorState() != null && event.getDoorState().equals("open")) { System.out.println ( "Door1 Open"); } else {System.out.println ( "도어 1 폐쇄"); }}}/***이 클래스는 도어 2 청취 인터페이스를 구현합니다. 특정 도어 개구부, 도어 닫기 및 조명 개구부 및 조명 폐쇄 작업*/public class 도어 리스너 (Public Class Doorlistener2) 도어 리스너 {@override public void doorvent (doorevent event) {// event.getdoorstate ()! = null && event.getDoorState (). Equals ( "Open")) {System.out.println ( "도어 2가 열리고 동시에 복도의 빛을 켭니다"); } else {system.out.println ( "도어 2가 닫히고 동시에 복도의 빛을 켭니다"); }}}(3) Doormanager.java를 통해 이벤트 소스 클래스를 만듭니다. 컬렉션 리스너 개체를 사용하여 모든 이벤트 리스너 개체를 저장합니다. 저장 방법은 AddDoorListener (..)을 통해입니다. NotifyListeners (..)는 시스템을 통지하는 데 사용되는 이벤트를 트리거하는 메소드입니다. 이벤트가 발생했으며 해당 처리 기능을 호출 할 수 있습니다.
/*** 이벤트 소스 객체, 여기서 문의 개구부 및 닫기를 제어하는 리모컨으로 상상할 수 있습니다. / ** * 이벤트 추가 * * @param 리스너 * 도어 리스너 */ public void adddoorListener (도어 리스너 리스너) {if (haresers == null) {haresers = new Hashset (); } LEASSERS.ADD (리스너); } / ** * 이벤트 제거 * * @param 리스너 * 도어 리스너 * / public void removedoorListener (도어 리스너스 리스너) {if (청취자 == null) return; 청취자. } / *** 도어 오프닝 이벤트 트리거* / 보호 된 void firepspaceopened () {if (lartisers == null) return; DOOREVENT 이벤트 = New Doorevent (this, "Open"); NotifyListeners (이벤트); } / *** 도어 닫기 이벤트를 트리거합니다* / 보호 된 void firewspaceclosed () {if (reater == null) return; DOOREVENT 이벤트 = New Doorevent (this, "Close"); NotifyListeners (이벤트); } / ** * 모든 도어 리스테너 알림 * / private void notifyListeners (Doorevent event) {iterator iter = warner.iterator (); while (iter.hasnext ()) {도어 리스너 리스너 = (도어 리스너) iter.next (); Listener.Doorevent (이벤트); }}}(4) 좋아, 마지막으로, 우리의 맞춤형 이벤트를 테스트하기 위해 테스트 프로그램을 작성하십시오. 이 프로그램은 이해하기 어렵지 않아야합니다 :)
/*** 주요 프로그램은 문을 열고 싶은 사람으로 상상됩니다*/public class doormain {public static void main (String [] args) {doormanager manager = new Doormanager (); Manager.AddDoorListener (New DoorListener1 ()); // 도어에 리스너 추가 1 Manager.AddDoorListener (New DoorListener2 ()); // 도어에 리스너 추가 // Open Door Manager.FireworkSpaceOpened (); System.out.println ( "I Come In"); // close manager.fireworkspaceclosed (); }}도어메라를 달리십시오
도어 1이 열리면 문 2가 열리고 복도의 조명이 열립니다.
나는 들어 왔습니다
도어 1은 문 2를 닫습니다. 복도 조명을 닫는 동안 문 2가 닫힙니다.
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!