使用 listener 和 DoubleProperty 获取变化量
Get change amount with listener and DoubleProperty
如果将侦听器添加到 DoubleProperty,是否可以像使用 Observable 列表那样将 DoubleProperty 更改的数量传递给侦听器?
someDoubleProperty.addListener(e -> {
// System.out.println(e.change());
});
我假设 DoubleProperty
你的意思是 javafx.beans.property.DoubleProperty
。
与其使用 InvalidationListener
,不如使用 javafx.beans.value.ChangeListener
。 ChangeListener
是具有此方法的功能接口:
void changed(ObservableValue<? extends T> observable, T oldValue, T newValue)
它为您提供旧值和新值以及作为更改来源的 ObservableValue
。
因为 DoubleProperty
是一个 ObservableValue
(它扩展了 Observable
),它有一个重载方法来添加 ChangeListener
:addListener(ChangeListener<? super T>)
。但是请注意,DoubleProperty
是 ObservableValue<Number>
,这意味着 oldValue
和 newValue
的类型将是 Number
.
正如@Zephyr 在评论中指出的那样,我错过了您也在寻找两个值之间的差异这一事实。虽然现在这很简单,因为您可以访问旧值和新值(正如您在评论中提到的那样),但我将在此处举一个例子 completeness/so 我完全回答了这个问题。
someDoubleProperty.addListener((observable, oldValue, newValue) -> {
double diff = newValue.doubleValue() - oldValue.doubleValue();
// Do something with "diff"...
});
如果将侦听器添加到 DoubleProperty,是否可以像使用 Observable 列表那样将 DoubleProperty 更改的数量传递给侦听器?
someDoubleProperty.addListener(e -> {
// System.out.println(e.change());
});
我假设 DoubleProperty
你的意思是 javafx.beans.property.DoubleProperty
。
与其使用 InvalidationListener
,不如使用 javafx.beans.value.ChangeListener
。 ChangeListener
是具有此方法的功能接口:
void changed(ObservableValue<? extends T> observable, T oldValue, T newValue)
它为您提供旧值和新值以及作为更改来源的 ObservableValue
。
因为 DoubleProperty
是一个 ObservableValue
(它扩展了 Observable
),它有一个重载方法来添加 ChangeListener
:addListener(ChangeListener<? super T>)
。但是请注意,DoubleProperty
是 ObservableValue<Number>
,这意味着 oldValue
和 newValue
的类型将是 Number
.
正如@Zephyr 在评论中指出的那样,我错过了您也在寻找两个值之间的差异这一事实。虽然现在这很简单,因为您可以访问旧值和新值(正如您在评论中提到的那样),但我将在此处举一个例子 completeness/so 我完全回答了这个问题。
someDoubleProperty.addListener((observable, oldValue, newValue) -> {
double diff = newValue.doubleValue() - oldValue.doubleValue();
// Do something with "diff"...
});