Есть ли способ получить уведомление, если изменится ЛЮБОЙ (или даже лучший, какой-либо из определенной группы) свойств узла в JavaFX?Уведомление в JavaFX при любых изменениях свойств
Заранее благодарен!
Есть ли способ получить уведомление, если изменится ЛЮБОЙ (или даже лучший, какой-либо из определенной группы) свойств узла в JavaFX?Уведомление в JavaFX при любых изменениях свойств
Заранее благодарен!
На самом деле я не знаю, почему вы хотите сделать что-то вроде этого, но если вы не хотите повторить себя для каждого свойства, вы могли бы сделать что-то вроде этого:
ObservableList<Property<?>> propList = FXCollections.observableArrayList();
private void doSomething(Observable observable){
System.out.println("Handled" + observable.toString());
}
private void attachListener(Property<?> p){
p.addListener(new InvalidationListener() {
@Override
public void invalidated(Observable observable) {
doSomething(observable);
}
});
}
// In start, or whereever you want to add the properties
propList.addListener(new ListChangeListener<Property<?>>(){
@Override
public void onChanged(javafx.collections.ListChangeListener.Change<? extends Property<?>> change) {
while(change.next()){
if(change.wasAdded())
for(Property<?> item : change.getAddedSubList()){attachListener(item);}
}
}
});
BooleanProperty a = new SimpleBooleanProperty(false);
BooleanProperty b = new SimpleBooleanProperty(false);
IntegerProperty c = new SimpleIntegerProperty(1);
propList.addAll(a,b,c);
a.set(true);
a.set(false);
b.set(true);
c.set(2);
Выход:
HandledBooleanProperty [value: true]
HandledBooleanProperty [value: false]
HandledBooleanProperty [value: true]
HandledIntegerProperty [value: 2]
Что он делает:
Вы добавить свойства к ObservableList
, и когда список получает новый элемент, обработчик прилагается в качестве InvalidationListener
, поэтому вы можете управлять набором свойств, добавляя элемент в список, а не добавляя слушателя один за другим.
Вы присоединяете слушателей, но вы никогда их не отделяете ... – fabian
Добавить такой же приемник недействительности ко всем из них? – Itai
Трудно видеть пример использования, который не связан с созданием привязки, связанной с интересующими свойствами. Что вы на самом деле пытаетесь сделать? –
@sillyfly спасибо. Я попробую метод sillyfly следующим образом: property1..addListener ((ObservableValue Extends Object> observable, Object oldValue, Object newValue) -> { // doSomething();}); property2..addListener ((ObservableValue Extends Object> visibleable, Object oldValue, Object newValue) -> { // doSomething();}); –