在JavaFX中将DoubleBinding转换为double

问题描述 投票:0回答:1
DoubleBinding angle = new SimpleDoubleProperty(myIndex*Math.PI*2).divide(nrMoons);
moon.centerXProperty().bind(earth.centerXProperty().add(Math.cos(angle.doubleValue()).multiply(RADIUS_ORBIT))); 

这是我的代码的一部分,在此我得到一个错误,即不能取消引用double angle.doubleValue(),并且Math.cos()需要double而不是DoubleBinding,有关如何转换它的任何想法?

java javafx double
1个回答
2
投票

假设您要添加的数量是角度的余弦与RADIUS_ORBIT的乘积,您只需要使用运算符*而不是函数multiply

moon.centerXProperty().bind(earth.centerXProperty().add(Math.cos(angle.doubleValue()) * RADIUS_ORBIT));

[请注意,这可能无法按照您想要的方式工作:传递给add(...)的值是不可观察的(它只是一个简单的double),因此该值仅在earth.centerXProperty()更改时才会更新,但会如果angle更改,则不会更新。这并不是因为使用*而不是multiply(),而是因为Math.cos()返回了普通的double而不是某种类型的ObservableDoubleValue。 JavaFX属性/绑定中没有用于“获取值的余弦”的直接API。

如果要使它动态地依赖于angle,则应使用自定义绑定(这也具有使计算更容易在代码中看到的优势)。

我认为这是您要计算的值:

moon.centerXProperty.bind(Bindings.createDoubleBinding(() -> {
    double earthCenter = earth.getCenterX();
    double offset = Math.cos(angle.get()) * RADIUS_ORBIT ;
    return earthCenter + offset ;
}, earth.centerXProperty(), angle);
© www.soinside.com 2019 - 2024. All rights reserved.