Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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_Bind_Pow_Bidirectional - Fatal编程技术网

Java-绑定可用操作

Java-绑定可用操作,java,javafx,bind,pow,bidirectional,Java,Javafx,Bind,Pow,Bidirectional,我想通过求幂绑定两个DoubleProperties。这就是我想做的事情: val1.bindBidirectional(2^val2); 这似乎是不可能的(请参阅)。为什么会这样?实现同样结果的最佳方式是什么?它是否以智能的方式制作了两个ChangeListeners 感谢绑定类提供了几种有用的方法来实现这一点。其中一种方法是createDoubleBinding()方法,它允许您定义自己的绑定代码 这里要做的是使用Math.pow()方法绑定val1,以计算求幂Math.pow()接受两个

我想通过求幂绑定两个
DoubleProperties
。这就是我想做的事情:

val1.bindBidirectional(2^val2);
这似乎是不可能的(请参阅)。为什么会这样?实现同样结果的最佳方式是什么?它是否以智能的方式制作了两个
ChangeListener
s


感谢绑定类提供了几种有用的方法来实现这一点。其中一种方法是
createDoubleBinding()
方法,它允许您定义自己的绑定代码

这里要做的是使用
Math.pow()
方法绑定
val1
,以计算求幂
Math.pow()
接受两个参数:功率因数和应用功率因数的值:

val1.bind(Bindings.createDoubleBinding(() ->
                Math.pow(2, val1.get()), val1));
以下是一个MCVE,演示了该概念:

import javafx.beans.binding.Bindings;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;

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()), val1, factor));

        System.out.println(result.get());

        // Change the value for demonstration purposes
        val1.set(6.0);
        System.out.println(result.get());
    }
}
创建绑定时,请务必注意,
createDoubleBinding()
接受一个
varargs
参数,该参数允许您指定绑定所依赖的所有
可观察对象。在您的例子中,它只是
val2
,但在上面的示例中,我还传递了一个
factor
属性

仅当一个或多个依赖属性发生更改时,才会更新绑定值


非常感谢您在开发此答案时提供的帮助

如果要创建双向绑定,该怎么办?