Moin.
Bisher habe ich UI's meistens mittels dem Observer Pattern aktualisiert.
Ich wollte mir aber letzt auch mal das feuern eigene Events anschauen - allerdings steige ich da leider nicht durch.
Also Beispiel hab ich n Beispiel aus dem Buch Swing Hacks (Abschnitt 94) genommen: Hack*94.*Fire Events and Stay Bug Free - Swing Hacks - ͼÊé - JAVA ±à³Ì×ÊÁÏÅ£±ÇÕ¾
Was ich hier nicht verstehe:
1. Wieso wird hier für den Test ne abstrakte Klasse genommen - kein Interface???
2. Was ist hier 'Observer' und was 'Observable' (ich hoff die Formulierung macht Sinn)
Ich hab jetzt schon zig Mal versucht, das Beispiel für mich umzumünzen - einfach n TextFeld einer UI von irgend wo her mittels Event abzudaten - immer ohne Erfolg...
Wie macht ihr das???
Der besagte code aus dem Beispiel:
Testklasse:
Listener:
EventfeuerKlasse/ Liste der Events
Bisher habe ich UI's meistens mittels dem Observer Pattern aktualisiert.
Ich wollte mir aber letzt auch mal das feuern eigene Events anschauen - allerdings steige ich da leider nicht durch.
Also Beispiel hab ich n Beispiel aus dem Buch Swing Hacks (Abschnitt 94) genommen: Hack*94.*Fire Events and Stay Bug Free - Swing Hacks - ͼÊé - JAVA ±à³Ì×ÊÁÏÅ£±ÇÕ¾
Was ich hier nicht verstehe:
1. Wieso wird hier für den Test ne abstrakte Klasse genommen - kein Interface???
2. Was ist hier 'Observer' und was 'Observable' (ich hoff die Formulierung macht Sinn)
Ich hab jetzt schon zig Mal versucht, das Beispiel für mich umzumünzen - einfach n TextFeld einer UI von irgend wo her mittels Event abzudaten - immer ohne Erfolg...
Wie macht ihr das???
Der besagte code aus dem Beispiel:
Testklasse:
Code:
public abstract class TestEventSource {
public abstract void addListener (TestEventListener l);
public abstract void removeListener (TestEventListener l);
public abstract void fireEvent (java.util.EventObject o);
public void test() {
addListener (new TestEventListener ("A"));
addListener (new TestEventListener ("B"));
addListener (new TestEventListener ("C"));
addListener (new TestEventListener ("D"));
addListener (new TestEventListener ("E"));
fireEvent(new java.util.EventObject(this));
}
}
Listener:
Code:
import java.util.*;
public class TestEventListener extends Object
implements EventListener {
String id;
public TestEventListener (String id) {
this.id = id;
}
public void handleEvent (EventObject o) {
System.out.println (id + " called");
if (id.equals ("C")) {
((TestEventSource) o.getSource()).removeListener (this);
}
}
}
EventfeuerKlasse/ Liste der Events
Code:
import java.util.*;
import javax.swing.event.*;
public class EventListenerListEventSource
extends TestEventSource {
EventListenerList listenerList = new EventListenerList();
public void addListener (TestEventListener l) {
listenerList.add (TestEventListener.class, l);
}
public void removeListener (TestEventListener l) {
listenerList.remove (TestEventListener.class, l);
}
public void fireEvent (EventObject o) {
Object[] listeners = listenerList.getListenerList();
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i] == TestEventListener.class) {
((TestEventListener) listeners[i+1]).handleEvent(o);
}
}
}
public static void main (String[] args) {
EventListenerListEventSource bfles =
new EventListenerListEventSource();
bfles.test();
}
}