2016-04-27 1 views
0

Есть ли способ получить уведомление, если изменится ЛЮБОЙ (или даже лучший, какой-либо из определенной группы) свойств узла в JavaFX?Уведомление в JavaFX при любых изменениях свойств

Заранее благодарен!

+0

Добавить такой же приемник недействительности ко всем из них? – Itai

+2

Трудно видеть пример использования, который не связан с созданием привязки, связанной с интересующими свойствами. Что вы на самом деле пытаетесь сделать? –

+0

@sillyfly спасибо. Я попробую метод sillyfly следующим образом: property1..addListener ((ObservableValue observable, Object oldValue, Object newValue) -> { // doSomething();}); property2..addListener ((ObservableValue visibleable, Object oldValue, Object newValue) -> { // doSomething();}); –

ответ

0

На самом деле я не знаю, почему вы хотите сделать что-то вроде этого, но если вы не хотите повторить себя для каждого свойства, вы могли бы сделать что-то вроде этого:

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, поэтому вы можете управлять набором свойств, добавляя элемент в список, а не добавляя слушателя один за другим.

+0

Вы присоединяете слушателей, но вы никогда их не отделяете ... – fabian

Смежные вопросы