überprüfen, ob Objekt verändert wurde

Herr Kaiser

Bekanntes Mitglied
Hallo Forum,

mein Code soll registrieren, wann mein Objekt fb geändert wurde. Mein Gedanke war, dem Objekt einen entsprechenden Listener zuzufügen.

Der Versuch

Java:
fb.addChangeListener(new javax.swing.event.ChangeListener() {
   public void stateChanged(javax.swing.event.ChangeEvent evt) {
   ...
   }
});

funktioniert aber leider nicht (cannot find symbol addChangeListener). Bin ich mit meiner Idee auf dem Holzweg oder ist das nur ein Syntaxfehler?
 
Zuletzt bearbeitet:
Danke, Eldorado, das ist ein guter Hinweis. Ich versuche mich gerade vergeblich darin, eine entsprechende Methode zu schreiben. Die Beispiele im genannten Tutorial beziehen sich alle auf Komponenten, deren Klassen diese Methoden schon mitbringen. Da ich noch nicht genügend Background habe, um mir die Lösung selbst herzuleiten, und meine Suche nach einem Beispielcode erfolglos war, könnte ich noch weitere Hinweise gut gebrauchen. Falls mir da jemand etwas auf die Sprünge helfen könnte, wäre das super! 🙂
 
Was meinst du denn genau mit "geändert wurde"?
Dass die Werte von irgendwelchen Varbiablen geändert wurden? Um was für eine Art Objekt handelt es sich denn? Um ein selbst geschriebenes?

Hier ein Beispiel für einen selbstgeschrieben Listener:
Java:
class XYZ {
        // Variablen
        private SoundListener listener[]=new SoundListener[0];

	public static interface SoundListener {
		public void songEnded(SoundEvent s);
		public void songStarted(SoundEvent s);
		public void songPaused(SoundEvent s);
		public void songContinued(SoundEvent s);
	}
	public static class SoundEvent {
                private Object quelle;

                public SoundEvent(Sound quelle) {
                     this.quelle=quelle;
                }
                public Object gibQuelle() {
                     return quelle;
                }
	}
	public void addSoundListener(SoundListener listen) {
		if(listen!=null) {
			SoundListener l[]=new SoundListener[listener.length+1];
			for(int i=0;i<listener.length;i++) {
				l[i]=listener[i];
			}
			l[l.length-1]=listen;;
			listener=l;
		}		
	}
        // Methoden ...

        // dort, wo diese Ereignisse auftreten, passiert dann beispielsweise folgendes:
        public void abspielen() {
             for(SoundListener l:listener) l.songStarted(new SoundEvent(this));
             // Ton wird abgespielt
        }
}
 
Ja, jonius, es geht um ein selbstgeschriebenes Objekt, das zig verschiedene Variablen enthält und gespeichert werden soll. Bevor man z. B. die Anwendung schließt, muss überprüft werden, ob es ungespeicherte Veränderungen gab. Ich hatte erhofft, dass es mir mit einem ChangeListener erspart bliebe, jede einzelne Variable nach Veränderungen zu überprüfen. Aber wenn ich es richtig deute, müsste ich das ohnehin, wenn ich einen eigenen Listener definiere (oder?). Vielleicht ist es einfacher, das Objekt zu einem bestimmten Zeitpunkt zu klonen und per .equals() das aktuelle Objekt mit dem früheren Klon zu vergleichen?
Danke für deinen Code. Werde mich gleich detailliert darein vertiefen.
 
Warum speicherst Du vor dem Schließen nicht einfach pauschal, dann muss man gar nichts überprüfen.

Die Geschichte mit dem Listener nennt sich Observer Pattern und ist so angelegt, dass unmittelbar nach einer Änderung am "beobachteten" Objekt, dieses seinen Listenern/Observern mitteilt: Hey bei mir hat sich was geändert. Eventuell sogar was sich geändert hat.
 
Wenn es nur darum geht, am Ende zu wissen, ob sich etwas geändert hat, könntest du auch mit einem Boolean arbeiten, der bei einer Änderung auf true gesetzt wird. Dann müsstest du die Variablen alle private machen und bei schreibenden Zugriffen den Boolean auf true setzen. Mit diesem ChangeListener dürfte das nicht möglich sein.
 
warum nach fast einen Monat daran noch erinnern?
bei den hinteren Themen kommt doch eh keiner vorbei bzw. dann könntest du ja 100 Themen pro Tag anmeckern..
 

Zurück
Oben