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,有关如何转换它的任何想法?
假设您要添加的数量是角度的余弦与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);