JavaFX bean 与属性——为什么两者都有?
JavaFX beans vs. properties -- why both?
我正在看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)
。
为什么有两个不同的"values"? "Bean" 在这种情况下的目的是什么?我应该使用哪一个?我正在尝试封装一个通用的 Clojure 对象,我可以在其上设置监听器,所以我认为它要么是这个,要么是 ObjectPropertyBase
,它是层次结构中的一个,也可以直接实例化。
我一直在根据需要慢慢吸收 Java 以了解如何在 Clojure 中使用 JavaFX,但是这个令人困惑。
谢谢! :)
"bean" 是 ObjectProperty
是 属性 的对象(换句话说,"owns" 是 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);
}
// ...
}
我正在看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)
。
为什么有两个不同的"values"? "Bean" 在这种情况下的目的是什么?我应该使用哪一个?我正在尝试封装一个通用的 Clojure 对象,我可以在其上设置监听器,所以我认为它要么是这个,要么是 ObjectPropertyBase
,它是层次结构中的一个,也可以直接实例化。
我一直在根据需要慢慢吸收 Java 以了解如何在 Clojure 中使用 JavaFX,但是这个令人困惑。
谢谢! :)
"bean" 是 ObjectProperty
是 属性 的对象(换句话说,"owns" 是 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);
}
// ...
}