【发布时间】:2014-10-05 05:39:42
【问题描述】:
我正在使用 JavaFX 的 Property<T> 类,我对结果非常满意,缩小了示例代码:
public CircularListCursor<E> {
private final Property<E> elementProperty;
public CircularListCursor() {
this.elementProperty = new SimpleObjectProperty(/*some value*/);
}
//various methods that call elementProperty.setValue(/*some value*/);
}
用法:
private final CircularListCursor<SelectionData> selectionDataCursor;
...
selectionDataCursor.elementProperty().addListener((observableValue, oldValue, newValue) -> {
oldValue.getLabel().setStyle("-fx-text-fill: black");
newValue.getLabel().setStyle("-fx-text-fill: red");
});
现在这几乎完美地工作了,但它不会触发对象的构造。它以这种方式工作是合乎逻辑的,因为在构造期间该属性尚未绑定,因此也无法触发任何更改事件。
但我确实希望在构造过程中收到初始值的通知以允许编写干净的代码,有没有办法做到这一点?
【问题讨论】:
-
所以您在构造时注册了一个内部
ChangeListener(= 在CircularListCursor的构造函数中)? -
@isnot2bad 不,
ChangeListener正在外面注册。 -
所以您希望它在注册时(调用
addListener时)获得某种初始触发器? -
@isnot2bad 正确,我的想法是这样的
-
好的,知道了。没有开箱即用的支持。我们总是直接使用私有方法作为监听器(Java 8 方法引用),因此我们可以在构造结束时调用它们一次进行初始化。
标签: java properties javafx listener