JavaFX bean与属性 - 为什么两者兼而有之?

时间:2015-02-09 18:59:43

标签: java clojure javafx javabeans

我在看http://docs.oracle.com/javase/8/javafx/api/javafx/beans/property/SimpleObjectProperty.html,我有些困惑。

我可以使用第三个构造函数

创建SimpleObjectProperty
SimpleObjectProperty(Object bean, String name, T initialValue) 

在Clojure中如下:(def sop (SimpleObjectProperty. 5 "mysop" 6))

这会创建一个SimpleObjectProperty,其中Bean值= 5(类型为java.lang.Long),非Bean值= 6,类型为(java.lang.Long)

为什么有两个不同的“价值观”?在这种情况下,“豆”的目的是什么?我应该使用哪一个?我正在尝试封装一个通用的Clojure对象,我可以在其上设置Listeners,所以我认为它或者是ObjectPropertyBase,它是层次结构中的一个,也可以直接实例化。

我已经慢慢吸收了Java,以了解如何在Clojure中使用JavaFX,但这一点令人困惑。

谢谢! :)

1 个答案:

答案 0 :(得分:4)

“bean”是ObjectProperty是属性的对象(换句话说,它是“拥有”ObjectProperty的Java对象)。请参阅documentation here

如果您使用来自多个源的属性注册了更改侦听器,并且希望能够区分状态已更改的对象,则此操作非常有用:

ChangeListener<Object> listener = (observable, oldValue, newValue) -> {
    ObjectProperty objProp = (ObjectProperty) observable ;
    Object bean = objProp.getBean();
    // do something....
};

someProperty.addListener(listener);
someOtherProperty.addListener(listener);

通常,您将使用bean引用,如下所示:

public class Person {
    // parameters are "owning bean" (i.e. this person), property name, and initial value:
    private final StringProperty name = new SimpleStringProperty(this, "name", "Fred");
    public StringProperty nameProperty() {
        return name ;
    }
    public final String getName() {
        return nameProperty().get();
    }
    public final void setName(String name) {
        nameProperty().set(name);
    }
    // ...
}
相关问题