1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| class ObservableMap<K, V> implements Map<K, V> {
private final EventListenerList listeners = new EventListenerList();
private final Map<K, V> inner;
public ObservableMap(Map<K, V> map) {
this.inner = map;
}
// On ajoute les méthodes de gestion des evenements :
public void addListener(ObservableMapListener<K, V> listener) {
this.listeners.add(ObservableMapListener.class, listener);
}
public void removeListener(ObservableMapListener<K, V> listener) {
this.listeners.remove(ObservableMapListener.class, listener);
}
protected void fireElementAdded(K key, V value) {
ObservableMapEvent<K, V> event = new ObservableMapEvent<K, V>(this, key, value);
for (ObservableMapListener listener : this.listeners.getListeners(ObservableMapListener.class)) {
listener.elementAdded(event);
}
}
// Puis on redirige les méthodes de Map vers notre Map,
// en gérant les cas où on a un evenement :
public V put(K key, V value) {
// On appelle la méthode "inner" :
V previousValue = inner.put(key, value);
// puis on génère l'évenement :
fireElementAdded(key, value);
return previousValue;
}
public boolean containsKey(Object key) {
// ici on n'a pas d'évenement, donc on appelle
// directement la méthode sur "inner" :
return inner.containsKey(key);
}
// De même pour toutes les méthodes de Map :
// ...
} |
Partager