【问题标题】:Notification in JavaFX when any property changes任何属性更改时 JavaFX 中的通知
【发布时间】:2016-08-21 11:46:03
【问题描述】:

如果 JavaFX 中节点的任何一个(或者更好的是,来自特定 GROUP 的任何一个)属性发生更改,有没有办法发出通知?

提前致谢!

【问题讨论】:

  • 为所有这些都添加相同的失效侦听器?
  • 很难看到一个不涉及创建绑定到感兴趣属性的绑定的用例。你到底想做什么?
  • @sillyfly 非常感谢。我将尝试 sillyfly 的方法如下: property1..addListener((ObservableValue extends Object> observable, Object oldValue, Object newValue) -> { // doSomething();}); property2..addListener((ObservableValue extends Object> observable, Object oldValue, Object newValue) -> { // doSomething();});

标签: javafx properties


【解决方案1】:

其实我也不知道你为什么要做这样的事情,但是如果你不想对每个属性都重复自己,你可以这样做:

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,因此您可以通过向列表添加元素而不是添加侦听器来控制属性集一个接一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多