Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将值绑定到计算结果?_Java_Javafx - Fatal编程技术网

Java 如何将值绑定到计算结果?

Java 如何将值绑定到计算结果?,java,javafx,Java,Javafx,假设我有两个属性,我想将第三个绑定为它们之间的计算 在本例中,我有一个val1和一个factor属性。我希望result属性绑定到这两个属性的“幂”:result=Math.pow(factor,val1) 下面的MCVE显示了我目前是如何尝试这样做的,但它没有被正确绑定 import javafx.beans.binding.Bindings; import javafx.beans.property.DoubleProperty; import javafx.beans.property.S

假设我有两个属性,我想将第三个绑定为它们之间的计算

在本例中,我有一个
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
因此,最初这似乎是正确绑定的,但是当
val1
因子
更改时,
结果
不会更新

如何正确绑定此计算?

该方法除了它的
可调用
之外,还需要一个
可观察
变量,表示绑定的依赖关系。仅当所列依赖项之一发生更改时,才会更新绑定。因为您没有指定任何绑定,所以绑定在创建后永远不会更新

要纠正您的问题,请使用:

result.bind(Bindings.createDoubleBinding(
    () -> Math.pow(factor.get(), val1.get()),
    val1, 
    factor));
除了它的
可调用
,该方法还需要一个
可观察
变量,表示绑定的依赖关系。仅当所列依赖项之一发生更改时,才会更新绑定。因为您没有指定任何绑定,所以绑定在创建后永远不会更新

要纠正您的问题,请使用:

result.bind(Bindings.createDoubleBinding(
    () -> Math.pow(factor.get(), val1.get()),
    val1, 
    factor));

非常感谢。我看到它接受了varargs,但无法理解它们的用途。回答得很好,谢谢。我看到它接受了varargs,但无法理解它们的用途。回答得很好。