我在看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,但这一点令人困惑。
谢谢! :)
答案 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);
}
// ...
}