java - 如何将值绑定到计算结果?
问题描述
假设我有两个属性,我想绑定第三个等于它们之间的计算。
在这个例子中,我有一个val1
和一个factor
属性。我希望result
属性绑定到两者的“权力”:result = Math.pow(factor, val1)
以下 MCVE 显示了我当前如何尝试这样做,但没有正确绑定。
import javafx.beans.binding.Bindings;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
public class Main {
private static DoubleProperty val1 = new SimpleDoubleProperty();
private static DoubleProperty factor = new SimpleDoubleProperty();
private static DoubleProperty result = new SimpleDoubleProperty();
public static void main(String[] args) {
// Set the value to be evaluated
val1.set(4.0);
factor.set(2.0);
// Create the binding to return the result of your calculation
result.bind(Bindings.createDoubleBinding(() ->
Math.pow(factor.get(), val1.get())));
System.out.println(result.get());
// Change the value for demonstration purposes
val1.set(6.0);
System.out.println(result.get());
}
}
输出:
16.0
16.0
因此,这似乎最初绑定正确,但在更改或更改result
时不会更新。val1
factor
如何正确绑定此计算?
解决方案
Bindings.createDoubleBinding
除了它之外,该方法还接受一个表示绑定依赖关系的Callable<Double>
可变参数。Observable
仅当更改列出的依赖项之一时,绑定才会更新。由于您没有指定任何内容,因此绑定在创建后永远不会更新。
要纠正您的问题,请使用:
result.bind(Bindings.createDoubleBinding(
() -> Math.pow(factor.get(), val1.get()),
val1,
factor));
推荐阅读
- excel - 使用索引和匹配函数来匹配行
- rest - 如何使用 SSE (TwinCAT3) 将数据从 Firebase REST API 流式传输到 Beckhoffs 的 PLC?
- mongodb - 使用带有嵌套文档值的 MongoDB .findOne() 函数
- javascript - Vue路由器生产问题
- amazon-web-services - 如何在云端自定义源请求策略中将授权标头列入白名单
- azure-devops - 排他锁 - 超时
- java - 创建初始重复数据的二维字符串数组的最有效方法是什么?
- python - 通过使用 ctypes 调用从 C 函数返回的意外整数
- r - 将 ggplot 规范块合并为单个函数,以应用于多个数据集
- javascript - vue过渡组动画卡住