Event Listener

Tagamoga

Mitglied
Hallo allerseits,

ich habe ein Project das unter Ganymede 3.4 mit SWT-Widgets programmiert ist. In diesem Project habe ich mehrere (bsp 5) Editoren. Davon ist eins ein Überblickt der Elemente, die in den anderen 4 angezeigt werden.
Nun wird eins dieser Objekt geändert und gespeichert. In diesem Moment sollte der Editor, der den Überblick zeigt, aktuallisiert werden.

Nun wurde folgende Lösung erarbeit:
Der Editor, der gerade gespeichert wird feuert ein Event und der Editor, der aktualisiert wird, fängt dieses ab und reagiert mit einem Reload.

So... ich weiß wie man Listener benutzt... aber ich habe keine Ahnung, wie man Events/Listener programmiert... bzw. wie man ein Event "losfeuert", so dass jeder Editor das mit bekommt. Kann mir da jemand helfen? Einstieg/tut/link auch sehr gerne genommen.

Grüße, Taggi.
 
Ist eigentlich ziemlich einfach. Du brauchst ein Interface welches deinen Listener beschreibt und die möglichen Events:

Java:
public interface MyListener {
     public void somethingChangedEvent(MyEventObject evt);
}

In dem MyEventObject bringst du alles unter was für das Event relevant wäre:

Java:
public class MyEventObject {
     public MyEventObject(String eventData) {
            ...
    }
}

In der Klasse die die Events werfen soll musst du die möglichkeit anbieten Listener der obigen Form zu registrieren und zu entfernen:

Java:
public class YourClass {

     private final List<MyListener> listenerList = new ArrayList<MyListener>();

     public void addMyListener(MyListener listener) {
            listenerList.add(listener);
      }

      public void removeMyListener(MyListener listener){
          listenerList.remove(listener);
      }

      public void someEventThrowingMethod(){
           .....
           //Event werfen
           for(MyListener listener : listenerList){
                listener.somethingChangedEvent(new MyEventObject("ein Event"));
          }
      }
}
 
Hallo...

so ich habe mich versucht. Zuerst nur etwas rudimentäres.. hier der Code:

Zunächst mein Event. Es braucht nicht wirklich Daten, es soll einfach nur eine Action auslösen, sobald es geworfen wird.
Code:
public class SavedEvent extends AbstractEvent {

	private static final long serialVersionUID = -5216762986267038054L;
	
	public SavedEvent(EventSource source) {
		super(source);
	}

}

Dann mein Listener. Den habe ich nicht abtract gehalten, weil er einfach zunächst nur einen Text rauswerfen soll, wenn er endlich das Event abgefangen sollte. Wenn das klappt wird das hier noch erweitert:
Code:
public class SavedListener implements Listener  {

	public void handleEvent(SavedEvent event) 
	{
		System.out.println("haha... gespeichert im NamedElementSavedEvent");
	}

	public void handleEvent(Event event) 
	{
		System.out.println("hm... gespeichert im Event");
	}

}

So nun habe ich ein Composite, dass diesen Listener einfügt. Sollte das Event geworfen werden, so soll der Listener mal einfach den Text ausgeben:

Code:
private void initialize()	{
		SavedListener savedListener = new SavedListener();
		this.addListener(Watt soll hier rein, savedListener);

Die Frage ist, wenn ich einen allgemeinen oder eigenen Listener einfüge, möchte er den EventType haben. Ein "typeof" bzw. "Istanceof" funktioneirt leider nicht. Was fehlt hier noch?
 
Zurück