Verständnissfrage zu Events
-
Moin moin zusammen.
Ich habe ein paar Klassen, welche von JComponent vererbt sind.
Jetzt will ich unter gewissen umständen, dass der Owner erfährt, dass sich was getan hat, z.B. über einem Action Performed.
Ich habe aber an manchen Orten im Internet gelesen, dass selber Events schmeissen als unschön gilt (quelle: http://www.tutorials.de/swing-java2d-3d-swt-jface/315569-java-event-im-code-ausloesen.html)Meine Frage: Wie soll ich dem Owner mitteilen, dass etwas passiert ist, ohne Event?
Wär froh um eine verständliche Erklärung.
Grüsse
Chiller
-
Auf was moechtest du denn genau reagieren? Ich verstehe nicht was du mit Owner meinst.
-
Also, sagen wir ich habe eine Klasse (von JComponent vererbt) und mein Hauptprogram.
Im Hauptprogramm habe ich ein paar instanzen von der Klasse.Sobald in einem der Instanzen etwas passiert (ein bestimmter punkt wurde angeklickt oder ein Wert hat sich geändert) soll das Hauptprogramm diese Werteänderung einlesen und etwas damit machen.
Was muss ich machen, damit das Hauptprogramm merkt, dass es etwas machen soll?
Meine erste Idee war ein Event, aber das ist ja anscheinend unsauberIch hoffe, dass das etwas verständlicher war...
Grüsse
Chiller
-
Die Klasse muss dazu einen Event Handler besitzen. Dein Hauptprogramm registriert dann eine Funktion zu dem Event Handler.
Immer wenn der Event Handler in der Klasse aufgerufen wird (e.g. Wert ändert sich) dann werden alle registrierten Funktionen aufgerufen.
-
Ich wuesste nicht was in der Situation an einem Listener falsch sein sollte.
Ich glaube in dem geposteten Thread von dir geht es um etwas anderes:
Der Typ da will kuenstlich den Event ausloesen, ohne dass es einen Event gibt. Das sollte man nicht machen. Aber sonst sehe ich das Problem nicht.Die Problemstellung, die du gegeben hast, sieht fuer mich nach einem Fall fuer das Observer-Pattern aus. Und das wird meistens ueber ein Litener-Konzept implementiert.
-
Mit dem Listener konzept sind wir aber wieder beim Event angelangt.
Wenn ich dich richtig verstanden habe, wäre es bei meiner Anwendung kein unsauberer Code oder?Grüsse
Chiller
-
Hmmm
Ich habe noch Probleme bei der Implementierung...
Ich versuche gerade einen eigenen Event zu machen, wie hier beschrieben, aber ich kriege zwei gleiche Fehlermeldungen...class UpdateEvent extends EventObject { public UpdateEvent(Object source) { super(source); } } interface UpdateListener { void update(UpdateEvent e); } public class Spielfeld extends JPanel implements ActionListener { private EventListenerList updateListenerList = new EventListenerList(); ... public void addUpdateListener(UpdateListener l) { updateListenerList.add(UpdateListener.class, l); } ... protected void fireUpdateEvent() { UpdateListener[] ls = updateListenerList.getListeners(UpdateEvent.class); UpdateEvent e = new UpdateEvent(this); for (UpdateListener l : ls) { l.update(e); } } }
Ich bekomme immer einen Fehler wenn ich auf die EventListenernList zugreife:
G:\BBZ\Java\Memory\Spielfeld.java:75: <T>add(java.lang.Class<T>,T) in javax.swing.event.EventListenerList cannot be applied to (java.lang.Class<UpdateListener>,UpdateListener) updateListenerList.add(UpdateListener.class, l); ^ G:\BBZ\Java\Memory\Spielfeld.java:220: <T>getListeners(java.lang.Class<T>) in javax.swing.event.EventListenerList cannot be applied to (java.lang.Class<UpdateEvent>) UpdateListener[] ls = updateListenerList.getListeners(UpdateEvent.class);
Ich schreibe das ganze im Textpad, darum sieht die Fehlermeldung so aus...
Kann mir jemand einen Tip geben?
Grüsse
Chiller