Eigene Events feuern

Status
Nicht offen für weitere Antworten.

Saberrider

Mitglied
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:
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(); 
		}
	}
 
S

SlaterB

Gast
> 1. Wieso wird hier für den Test ne abstrakte Klasse genommen - kein Interface???

abstrakte Klassen haben gegenüber Interfacen den Vorteil, dass bestimmte Methoden schon komplett implementiert werden können,
so auch hier -> die Methode test()

> 2. Was ist hier 'Observer' und was 'Observable' (ich hoff die Formulierung macht Sinn)

Observer sind die Listener, Observable das Objekt, welches die Listener kennt und die Events abfeuert,
wenn man die Begriffe nur ein bisschen verstanden hat, dann ist doch die Lage hier klar?

-------

das ganze Beispiel hat nichts mit Swing oder UI zu tun,
es definiert einen eigenen Kreis aus Objekten und zeigt darin einige Probleme der Event-Verarbeitung,
im Grunde nur ein Problem: removeListener() während ein Event abgearbeitet wird

was meinst du mit TextFeld? Swing JTextField?
willst du auf Tastatur/ Maus-Eingaben aus diesem Standard-Framework reagieren?
benutzte ActionListener, DocumentListener, MouseListener, KeyListener usw., kennst du diese Grundlagen?

ob du dann direkt irgendwas verarbeitest oder eigene andere Listener informierst, ist danach zu entscheiden
 
Zuletzt bearbeitet von einem Moderator:

Saberrider

Mitglied
Sorry, ich hätte meinen Versuch des 'ummünzes' etwas genauer beschreiben sollen.
Also wie gesagt hatte ich das obige Beispiel als Grundbauplan.

Meine Applikation sieht so aus, das ich von mein Model aus meine UI updaten möchte (beispielsweise möchte ich eine Statusinfo in ein TextFeld schreiben).
Bisher hab ich sowas immer über Observer gemacht - jetzt möchte ich aber mal eigene Events probieren. Die UI Geschichte dient dabei nur als Beispiel.

Wenn ich mir Java Standart Events anschaue (ActionListener) als Beispiel: bei nem button mach ich ein AddActionListener - danach muß ich das Interface vom Eventlistener in der Klasse implementieren (wenn alles in einer Klasse gemacht wird).
Wenn ich nun aber nicht ein 'normalen' Listener implementieren möchte sondern den aus obigem Beispiel: auf die gleiche Weise geht das ja nicht, weil ich kein Interface habe (sondern die abstrakte Klasse).
Wie mache ich das... Ich müßte doch dann doch... Ich steh hier voll aufm Schlauch*nerv*
Ich kanns nicht mal richtig formulieren...
 
S

SlaterB

Gast
TestEventSource bietet ja nur die test()-Methode, die brauchst du gar nicht für dein Programm, also raus damit,
schon kannst du den Rest zum Interface machen

das TextFeld wäre dann eine TestEventSource,
da du TextFeld eh als normale Klasse implementieren musst, könntest du ganz auf ein Interface verzichten,
so wie JTextField addActionListener() hat, braucht dein TextFeld auch eine addListener() Methode, eine Liste zur Verwaltung usw.

ich frage mich nur, wann du welche Events feuern möchtest,
auf Usereingaben wie Tastatur/ Maus kann man nämlich nicht einfach so reagieren, da steckt im Falle von Swing ein Riesen-Framework bestimmt auch mit nativen Methoden hinter,
daher mein Hinweis, dass du wahrscheinlich an einem normalen JTextField einen Swing-Listener registerien musst, der die Events liefert, aus denen du dann neue eigene Events an eigene Listener weiterleiten kannst
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
0x7F800000 Wovon eigene Events für spezialisierte JComponents ableiten? Allgemeine Java-Themen 2
J OpenOffice.org Events in eigene Anwendung umleiten Allgemeine Java-Themen 4
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
E Input/Output Eigene Datei mit java öffnen Allgemeine Java-Themen 9
missy72 Klassen Eigene Klasse MessageWindow ähnlich der Alert Klasse Allgemeine Java-Themen 2
J Eigene Api erstellen und dann auch verwenden - Ordnerstruktur Allgemeine Java-Themen 1
RalleYTN Eigene ScriptEngine? Allgemeine Java-Themen 14
L Eigene Dependency Injections definieren? Allgemeine Java-Themen 4
K Eigene API erstellen? Allgemeine Java-Themen 13
T Best Practice Eigene GUI programmieren | MouseMotion Detection Allgemeine Java-Themen 3
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
J eigene Java Bibliothek Allgemeine Java-Themen 2
M Output einer anderen/externen .jar in eigene JTextArea Allgemeine Java-Themen 4
B Klassen Eigene Klasse als Array benutzen Allgemeine Java-Themen 3
D Eigene/r Collection/Container Allgemeine Java-Themen 3
F Eigene .jar mit anderer .jar öffnen Allgemeine Java-Themen 7
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
H Best Practice Ideensuche: Flexibel hinzufügbare eigene Parser Allgemeine Java-Themen 6
T OOP Die eigene Bruchklasse Allgemeine Java-Themen 11
P Eigene Exception Klasse Allgemeine Java-Themen 7
J Java - Eigene DLL importieren Allgemeine Java-Themen 25
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
S OOP Problembereichsmodell: Bestehende Framework Klasse in eigene Klassenstruktur einbinden Allgemeine Java-Themen 9
E Eigene Exception Klasse erstellen Allgemeine Java-Themen 3
S Methoden Eigene Klasse als Rückgabewert Allgemeine Java-Themen 6
S eigene regEx schreiben Allgemeine Java-Themen 4
O Collections Eigene Methodenzusicherung bei Collections als Parameter Allgemeine Java-Themen 2
M Eigene Klasse verschlüsselt in Datei speichern Allgemeine Java-Themen 13
N Geodaten für eigene Routenplanung Allgemeine Java-Themen 5
M Problem beim schreiben einer eigene generische Klasse Hashtable Allgemeine Java-Themen 11
C Eigene Sounddateien schreiben Allgemeine Java-Themen 12
M Problem beim schreiben einer eigene generische Klasse LinkedList Allgemeine Java-Themen 34
M Best Practices Exception Handling für eigene library Allgemeine Java-Themen 8
M Eigene Factory Klasse Allgemeine Java-Themen 21
M eigene Klasse durch Composition mit java.io.File erweitern Allgemeine Java-Themen 3
S eigene Update Funktion Allgemeine Java-Themen 5
H2SO3- getMethods(): eigene methoden rausfinden Allgemeine Java-Themen 4
C eine eigene Javadoc erstelen Allgemeine Java-Themen 3
Kr0e Eigene RMI Implementierung Allgemeine Java-Themen 3
S Eigene Bibliothek Allgemeine Java-Themen 2
M Eigene Dateiendung? Allgemeine Java-Themen 3
M Plugins für eigene Programme Allgemeine Java-Themen 3
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
A Eigene Java Plugins entwickeln - wie optimal? Allgemeine Java-Themen 14
R Eigene ArrayList vom Typ Short, Integer oder Double Allgemeine Java-Themen 4
U Eigene "Dining Philosopher" Interpretation weckt Philos nie auf Allgemeine Java-Themen 2
SuperSeppel13 Packete der Java Bibliothek ins eigene Prjekt integrieren Allgemeine Java-Themen 4
P Eigene Klasse kopieren die auf sich selbst refferenziert Allgemeine Java-Themen 8
G Umgebungsvariabeln auslesen (Path, Temp, oder eigene) Allgemeine Java-Themen 2
T Eigene PID ermitteln! Allgemeine Java-Themen 3
D Icon für eigene Dateiendung Allgemeine Java-Themen 7
G Eigene "Speicherverwaltung" Allgemeine Java-Themen 5
H eigene Annotations Allgemeine Java-Themen 2
S eigene Klasse die JButton extended - als Liste! Allgemeine Java-Themen 6
D Performance: ArrayList vs. Array vs. "Eigene Liste&quot Allgemeine Java-Themen 8
A Eigene Wrapper-Klassen Allgemeine Java-Themen 2
J Kann eigene Klasse nicht ermitteln Allgemeine Java-Themen 4
M Wann verwendet man PropertyChangedEvents, wann eigene? Allgemeine Java-Themen 3
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
B eigene Klassen verkaufen Allgemeine Java-Themen 2
W eigene event-Klasse, event posten Allgemeine Java-Themen 2
reibi Eigene exception mit feld "serialVersionUID" Allgemeine Java-Themen 3
M Eigene .jar in anderes Programm importieren[eclipse] Allgemeine Java-Themen 6
T Eigene Libary Allgemeine Java-Themen 6
E Eigene Exception Allgemeine Java-Themen 11
Q Bibliotheken mit ins eigene Jar aufnehmen Allgemeine Java-Themen 4
M Eigene Exception Klasse Allgemeine Java-Themen 4
M eigene Objekte vergleichen Allgemeine Java-Themen 6
K log4j - eigene Info-Ausgaben Allgemeine Java-Themen 5
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2
G JWindow verschieben bei mousedragged auf eigene titelleiste Allgemeine Java-Themen 3
N Methoden in eigene Dateien auslagern? Allgemeine Java-Themen 10
B Eigene Datentypen Allgemeine Java-Themen 5
G Brauche hilfe bei JMF: Wie eigene Streaming Data Source! Allgemeine Java-Themen 4
G eigene klassen die ein jar verwenden als neues jar erstellen Allgemeine Java-Themen 4
O Externe Jars in eigene JAr packen in Eclipse Allgemeine Java-Themen 5
R Updateprozedur ü. Internet fürs eigene Programm? Allgemeine Java-Themen 24
G eigene uhrzeit in einer java applikation führen Allgemeine Java-Themen 19
R Eigene Konfigurationsdatei für größere Projekte. Allgemeine Java-Themen 4
J Eigene Callback Methode? Allgemeine Java-Themen 3
S eigene evetns erstellen Allgemeine Java-Themen 5
K eigene GUI Komponente wird nicht angezeigt Allgemeine Java-Themen 3
D Eigene Classes aus anderen .java-Dateien Allgemeine Java-Themen 2
G Eigene PrintService Implementierung. Allgemeine Java-Themen 5
C Die Konsole ins eigene Programm einbauen Allgemeine Java-Themen 5
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
F Event Handling Eingabestift events entgegennehmen Allgemeine Java-Themen 0
M Events gehen verloren Allgemeine Java-Themen 7
R Events "verteilen" Allgemeine Java-Themen 2
U Events Allgemeine Java-Themen 3
SuperSeppel13 MouseMotion Events unabhängig vom Cursor Allgemeine Java-Themen 7
M Asynchron Events verschicken... Allgemeine Java-Themen 2
O Auf alle Events reagieren Allgemeine Java-Themen 3
R Events von Klasse 1 in Klasse 2 abrufen Allgemeine Java-Themen 2
N Events in Java? Allgemeine Java-Themen 6
MQue Auslösen eines Events beim Drücken eines Buttons Allgemeine Java-Themen 12
M Events im Quellcode auslösen Allgemeine Java-Themen 4

Ähnliche Java Themen


Oben