JavaFX - 属性的含义"无效"

时间:2015-01-28 23:45:44

标签: javafx listener observable bindable

在JavaFX的上下文中,在什么意义上是属性"无效"什么时候改变?我不明白使用这个词的原因。

JavaFX属性是一个可观察的对象并包装字段值。因此,当房产更新或无效时,会通知其listerners /观察员。这是什么意思?

2 个答案:

答案 0 :(得分:7)

我在这里找到了很好的解释。

enter image description here

  

调用intProperty.set(7168)时,会触发无效事件   到其他物业。收到此无效事件后,   otherProperty只是简单地说明了它的价值是否定的事实   更长的有效。它不会立即重新计算它   通过查询intProperty的值来获取值。重新计算是   稍后在调用otherProperty.get()时执行。想象一下,如果相反   只调用一次intProperty.set(),如上面的代码所示   intProperty.set()多次; otherProperty仍然重新计算它   价值只有一次。

经过测试后我发现了这个例子。

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;

public class InvalidMean{
    public static void main(String[] args){
        IntegerProperty num1 = new SimpleIntegerProperty(15);
        IntegerProperty num2 = new SimpleIntegerProperty(10);
        // num2.bind(num1);
        // num1.set(56);
        System.out.println(num2);
    }
}

运行此代码您将获得此输出:

IntegerProperty [value: 10]

现在从评论行中删除评论。你会得到这个输出。

IntegerProperty [bound, invalid]

num2的值无效,因为新值已到达但尚未更新。正如JavaFX Doc所描述的那样仅仅是因为懒惰的评价。

  

JavaFX绑定和属性实现都支持延迟   评估,这意味着当发生变化时,值不是   立即重新计算。重新计算发生在以后,如果和何时   随后请求价值。

如果您希望该值有效,请致电num2.getValue();num2.get();System.out.println(num2);之前,您会看到属性有效。

注意:在上面的示例num2.bind(num1);num1.set(56);中,两者都会使num2的值无效,因为绑定已经更改了num2set()的值也试图改变价值。

答案 1 :(得分:0)

关于懒惰评估的全部内容。在Devoxx 2011上召开的video会议帮助我理解了这个概念。

有趣的东西从~5:00开始。