예, 누군가가 자신 만의 청취자를 만드는 방법을 보여 주면 꽤 간단합니다.
먼저 자신 만의 EventObject를 만듭니다. 다음은 내 프로젝트 중 하나의 예입니다.
import gov.bop.rabid.datahandler.bean.InmateDataBean;
import java.util.EventObject;
public class InmatePhotoEventObject extends EventObject {
private static final long serialVersionUID = 1L;
protected InmateDataBean inmate;
public InmatePhotoEventObject(Object source) {
super(source);
}
public InmateDataBean getInmate() {
return inmate;
}
public void setInmate(InmateDataBean inmate) {
this.inmate = inmate;
}
}
EventObject를 확장하는 것 외에도이 클래스에는 특별한 것이 없습니다. 생성자는 EventObject에 의해 정의되지만 원하는 모든 메서드를 만들 수 있습니다.
둘째, EventListener 인터페이스를 정의합니다.
public interface EventListener {
public void handleEvent(InmatePhotoEventObject eo);
}
작성한 EventObject를 사용합니다. 원하는 메서드 이름을 사용할 수 있습니다. 이것은 청취자에 대한 응답으로 작성되는 코드 용 인터페이스입니다.
세 번째로 ListenerHandler를 작성합니다. 여기에 같은 프로젝트의 것이 있습니다.
import gov.bop.rabid.datahandler.bean.InmateDataBean;
import gov.bop.rabid.datahandler.main.EventListener;
import gov.bop.rabid.datahandler.main.InmatePhotoEventListener;
import gov.bop.rabid.datahandler.main.InmatePhotoEventObject;
import java.util.ArrayList;
import java.util.List;
public class InmatePhotoListenerHandler {
protected List<EventListener> listeners;
public InmatePhotoListenerHandler() {
listeners = new ArrayList<EventListener>();
}
public void addListener(EventListener listener) {
listeners.add(listener);
}
public void removeListener(EventListener listener) {
for (int i = listeners.size() - 1; i >= 0; i--) {
EventListener instance = listeners.get(i);
if (instance.equals(listener)) {
listeners.remove(i);
}
}
}
public void fireEvent(final InmatePhotoEventObject eo,
final InmateDataBean inmate) {
for (int i = 0; i < listeners.size(); i++) {
final EventListener instance = listeners.get(i);
Runnable runnable = new Runnable() {
public void run() {
eo.setInmate(inmate);
instance.handleEvent(eo);
}
};
new Thread(runnable).start();
}
}
public static void main(String[] args) {
System.out.println("This line goes in your DataHandlerMain class "
+ "constructor.");
InmatePhotoListenerHandler handler = new InmatePhotoListenerHandler();
System.out.println("I need you to put the commented method in "
+ "DataHandlerMain so I can use the handler instance.");
// public InmatePhotoListenerHandler getInmatePhotoListenerHandler() {
// return handler;
// }
System.out.println("This line goes in the GUI code.");
handler.addListener(new InmatePhotoEventListener());
System.out.println("Later, when you've received the response from "
+ "the web service...");
InmateDataBean inmate = new InmateDataBean();
inmate.setIntKey(23);
handler.fireEvent(new InmatePhotoEventObject(handler), inmate);
}
}
이 클래스의 주된 메소드는 ListenerHandler를 사용하는 방법을 보여줍니다. 클래스의 나머지 메소드는 표준입니다. 당신은 당신 자신의 EventObject와 EventListener를 사용할 것이다.