Может быть, это не было ясно из вопроса (если это было так, я думаю, мне не нужно было задавать вопрос;).Моя ошибка заключалась в том, что я действительно хотел реагировать на две разные вещи: один вид слушателя должен уведомляться каждый раз, когда устанавливается значение, и другой тип слушателя только при изменении значения.Так что мне на самом деле нужно что-то вроде этого:
import javafx.event.EventHandler;
import java.util.ArrayList;
import javafx.event.ActionEvent;
import javafx.event.Event;
class Foo {
private SimpleBooleanProperty foo = new SimpleBooleanProperty();
private ArrayList<EventHandler> listener = new ArrayList<>();
public void set(Boolean value) {
foo.set(value);
ActionEvent e = new ActionEvent();
for(EventHandler l : listener) l.handle(e);
}
public void addChangeListener(ChangeListener<Boolean> x) {
foo.addListener(x);
}
public void addEventHandler(EventHandler a){
listener.add(a);
}
}
Чтобы я мог написать это:
Foo foo = new Foo();
foo.addChangeListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable,
Boolean oldValue,
Boolean newValue) {
System.out.println("value changed");
}
});
foo.addEventHandler(new EventHandler() {
@Override
public void handle(Event event) {
System.out.println("value was set");
}
});
foo.set(false);
, где даже если значение не меняется, обработчик событий получает уведомление.