Parece que desea envolver un booleano en una clase en la que pueda escuchar los cambios.
class ObservableBoolean {
// "CopyOnWrite" to avoid concurrent modification exceptions in loop below.
private final List<ChangeListener> listeners =
new CopyOnWriteArrayList<ChangeListener>();
private boolean value;
public boolean getValue() {
return value;
}
public synchronized void setValue(boolean b) {
value = b;
for (ChangeListener cl : listeners)
cl.stateChanged(new ChangeEvent(this));
}
public synchronized void addChangeListener(ChangeListener cl) {
listeners.add(cl);
}
public synchronized void removeChangeListener(ChangeListener cl) {
listeners.remove(cl);
}
}
Después, simplemente hacer:
ObservableBoolean b = new ObservableBoolean();
//...
// Start the "period of time":
b.addChangeListener(iWantToBeNotifiedOfChanges);
// ...
// End the "period of time":
b.removeChangeListener(iWantToBeNotifiedOfChanges);
Esto es en realidad un simple caso del patrón MVC (y el patrón de observador). El modelo en este caso es el ObservableBoolean y la vista sería la "vista" que quiere que se le notifiquen los cambios.
También puede escribir su propia interfaz ChangeListener
si se quiere evitar un aspecto extraño javax.swing...
importación
+1 para patrón de observador. Me pregunto si desea monitorear el booleano en sí, o si en su lugar debería tener la Clase que está cambiando el estado de la lista de oyentes, y disparar los eventos de cambio cuando realiza el mod en el booleano. – akf
@aioobe -> ver mi edición ahora – Xorty
+1 ... pero algunos puntos: la lista de oyentes debería ser probablemente final, getValue() no está sincronizado, si un oyente intenta eliminarse a sí mismo como un oyente cuando se le notifica esto conducirá a una ConcurrentModificationException. Puede resolver este problema final utilizando CopyOnWriteArrayList en lugar de ArrayList. – Adamski