Java 이벤트 처리 메커니즘(사용자 정의 이벤트) 인스턴스 상세 정보

Java 이벤트 처리 메커니즘
java의 이벤트 메커니즘 참여자는 다음과 같은 세 가지 역할을 합니다.
1.eventobject: 이벤트 상태 대상은listener의 상응하는 방법에 사용되며, 매개 변수로서listerner와 같은 방법에 일반적으로 존재한다
2.eventsource: 구체적인 이벤트 원본, 예를 들어 버튼을 누르면 버튼은 이벤트 원본입니다. 버튼이 특정한 이벤트에 응답하려면 특정한listener를 등록해야 합니다.
3. 이벤트 리스너: 모든 명확한 사건의 발생에 대해 명확한 자바 방법을 정의한다.이러한 방법은 이벤트 감청자(EventListener) 인터페이스에 집중적으로 정의되어 있으며, 이 인터페이스는 자바를 계승해야 한다.util.EventListener. 사건 감청자의 인터페이스 중 일부 또는 모든 방법을 실현한 종류는 사건 감청자이다.
사건이 발생함에 따라 상응하는 상태는 일반적으로 사건 상태 대상에 봉인되고 이 대상은 반드시java에서 계승되어야 한다.util.EventObject.사건 상태 대상은 해당 사건의 감청자에게 단참으로 전달된다.특정한 이벤트를 보내는 이벤트 원본의 표지는 규정된 디자인 형식에 따라 이벤트 감청자에게 등록 방법을 정의하고 지정한 이벤트 감청자의 인터페이스 실례에 대한 인용을 받는 것이다.
구체적인 감청 이벤트 클래스는 이벤트object가 발생할 때 해당하는 방법을 호출하여 처리합니다.
먼저 jdk가 제공하는 이벤트 패키지를 보십시오.
public interface EventListener: 모든 이벤트 탐지기 인터페이스는 확장해야 하는 태그 인터페이스입니다.
public class EventObject extends Object implements Serializable
모든 이벤트 상태 대상은 파생된 루트에서 파생됩니다.모든 이벤트는 구성할 때 대상인'source'를 인용하여 논리적으로 이 대상이 이벤트와 관련된 최초의 대상이라고 여긴다.
(1) DoorEvent를 통해.java 파일은 DoorEvent 클래스를 만듭니다. 이 클래스는 EventObject를 계승합니다.

/**
*  , EventObject
*/
public class DoorEvent extends EventObject {

 private static final long serialVersionUID = 6496098798146410884L;

 private String doorState = "";//  , “ ” “ ” 

 public DoorEvent(Object source, String doorState) {
  super(source);
  this.doorState = doorState;
 }

 public void setDoorState(String doorState) {
  this.doorState = doorState;
 }

 public String getDoorState() {
  return this.doorState;
 }

}

(2) 새로운 이벤트 감청 인터페이스를 정의합니다. 이 인터페이스는 EventListener로부터 계승됩니다.이 인터페이스에는 doorEvent 이벤트에 대한 프로세서가 포함되어 있습니다.

/**
*  , DoorEvent 
*/

public interface DoorListener extends EventListener {
  public void doorEvent(DoorEvent event);
}

위의 인터페이스를 통해 우리는 사건 감청 클래스를 다시 정의하는데 이런 종류는 감청 기능과 사건 처리 기능을 구체적으로 실현했다.

/**
*    1 , , 
*/


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(" 1 ");
  } else {
   System.out.println(" 1 ");
  }
 }

}

/**

*    2 , , , , 
*/


public class DoorListener2 implements DoorListener {

 @Override
 public void doorEvent(DoorEvent event) {
  // TODO Auto-generated method stub
  if (event.getDoorState() != null && event.getDoorState().equals("open")) {
   System.out.println(" 2 , ");
  } else {
   System.out.println(" 2 , ");
  }
 }

}

(3) DoorManager를 통해java는 모든 이벤트 감청기 대상을 Collection listeners 대상으로 저장하는 이벤트 원본 클래스를 만듭니다. 저장 방식은addDoorListener(...)를 통해 저장됩니다.이런 방법.notifyListeners(..)이벤트를 촉발하는 방법으로 시스템에 알립니다. 사건이 발생했으니 상응하는 처리 함수를 호출하세요.

/**
*  , ,
* ( swing , button)
*/


public class DoorManager {
 private Collection listeners;

 /**
  *  
  * 
  * @param listener
  *   DoorListener
  */
 public void addDoorListener(DoorListener listener) {
  if (listeners == null) {
   listeners = new HashSet();
  }
  listeners.add(listener);
 }

 /**
  *  
  * 
  * @param listener
  *   DoorListener
  */
 public void removeDoorListener(DoorListener listener) {
  if (listeners == null)
   return;
  listeners.remove(listener);
 }

 /**
  *  
  */
 protected void fireWorkspaceOpened() {
  if (listeners == null)
   return;
  DoorEvent event = new DoorEvent(this, "open");
  notifyListeners(event);
 }

 /**
  *  
  */
 protected void fireWorkspaceClosed() {
  if (listeners == null)
   return;
  DoorEvent event = new DoorEvent(this, "close");
  notifyListeners(event);
 }

 /**
  *  DoorListener
  */
 private void notifyListeners(DoorEvent event) {
  Iterator iter = listeners.iterator();
  while (iter.hasNext()) {
   DoorListener listener = (DoorListener) iter.next();
   listener.doorEvent(event);
  }
 }
}

(4) 자, 마지막으로 테스트 프로그램을 써서 사용자 정의 이벤트를 테스트해 보세요. 이 프로그램은 이해하기 어렵지 않겠죠.)

/**
*  , 
*/


public class DoorMain {
 public static void main(String[] args) {
  DoorManager manager = new DoorManager();
  manager.addDoorListener(new DoorListener1());//  1 
  manager.addDoorListener(new DoorListener2());//  2 
  //  
  manager.fireWorkspaceOpened();
  System.out.println(" ");
  //  
  manager.fireWorkspaceClosed();
 }
}

DoorMain 실행
문을 열다
문 2 를 열고 복도 의 불 을 동시에 켜다
저 들어왔어요.
문 1 닫기
문 2 닫고 복도 불 끄기
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기