使用侦听器和 DoubleProperty 获取找零金额

Alw*_*elp 2 java properties listener java-8

给定一个添加到 DoubleProperty 的侦听器,是否可以像使用 Observable 列表一样将 DoubleProperty 更改的数量传递给侦听器?

someDoubleProperty.addListener(e -> {
 // System.out.println(e.change());
});
Run Code Online (Sandbox Code Playgroud)

Sla*_*law 6

我假设DoubleProperty你的意思是javafx.beans.property.DoubleProperty

\n\n

而不是使用InvalidationListenera 使用 a javafx.beans.value.ChangeListener。AChangeListener是具有此方法的功能接口:

\n\n
void changed\xe2\x80\x8b(ObservableValue<? extends T> observable, T oldValue, T newValue)\n
Run Code Online (Sandbox Code Playgroud)\n\n

它为您提供旧值和新值以及ObservableValue变化的来源。

\n\n

由于 aDoubleProperty是一个ObservableValue(扩展Observable),它有一个重载方法用于添加ChangeListener: addListener(ChangeListener<? super T>)。但请注意, aDoubleProperty是 an ,这意味着和 的ObservableValue<Number>类型将为。oldValuenewValueNumber

\n\n
\n\n

正如@Zephyr 在评论中指出的那样,我错过了您也在寻找两个值之间的差异这一事实。虽然现在您可以访问旧值和新值(正如您在评论中提到的那样),但这很简单,但为了完整性,我将在此处举一个示例/所以我完全回答了这个问题。

\n\n
someDoubleProperty.addListener((observable, oldValue, newValue) -> {\n    double diff = newValue.doubleValue() - oldValue.doubleValue();\n    // Do something with "diff"...\n});\n
Run Code Online (Sandbox Code Playgroud)\n

  • 你是对的@Zephyr,但访问 oldValue/newValue 就足以让我到达那里:) (2认同)