Erläutern wir das mal anhand eines anderen Beispiels.
Sagen wir mal, du hast eine eigene Label-Klasse. Du möchtest einen Listener,(1) der das Event(2) abfängt, wenn sich der Wert des Labels ändert.
Dann würde deine Basis-Klasse zunächst so aussehen:
class MyLabel {
private String value;
public void setValue(String value) {
this.value = value;
}
public String getValue() {
return this.value;
}
}
(1) Ein Listener, wie der Name schon sagt: Ist eine Klasse, besser gesagt ein Interface, dessen Aufgabe es ist "zuzuhören".
(2) Ein Event ist ein Ereignis. Jedoch Codeseitig hat die Event-Klasse nur einen Tieferen Sinn: Informationen bereit zu stellen.
Auf obiges Beispiel bezogen benötigt man nun zwei weitere Teile. Genauer gesagt: Eine Klasse und ein Interface.
Eine Event-Klasse die du mit ausreichend Informationen Bestücken kannst: Hier eignet sich: Event-Name, Quelle, WertVorher, WertNachher.
class MyEvent {
private String eventName;
private Object source;
private Object valueBefore;
private Object valueAfter;
public MyEvent(String eventName, Object source, Object valueBefore, Object valueAfter) {...}
// Getter+Setter
}
Hier kannst du alle nötigen Informationen Speichern, die dem Listener später zur verfügung stehen können.
Der Listener selbst ist ein Interface, mit einer Methode, welche das Event als Parameter bekommt:
public Interface MyListener {
public void onEvent(MyEvent event);
}
In deinem Label, in dem du das Ereignis abfangen möchtest: Ändert sich der Wert:
Solltest du die Eigenschaft Listener hinzufügen:
private MyListener onValueChangedListener;
// getter + setter
Welche du dann im setter deines Wertes ergänzen kannst:
public void setValue(String value) {
if (onValueChangedListener != null) {
MyEvent event = new MyEvent("onValueChanged", this, this.value, value);
onValueChangedListener.onEvent(event);
}
this.value = value;
}
Du erstellst ein Event-Objekt mit allen nötigen Informationen: EventName, Quelle, Wert-Vorher, Wert-Nachher und gibst dann diese Information als Paramter der Methode deines Listeners mit, die du hier ausführst.
Also Reagiert der Listener auf einen Umstand und teilt nähere Informationen über ein Event-Objekt mit.