下面的(Scala)代码会产生错误的结果(即[x = 0.0, y = 0.0]
)。
为什么?
如何解决?
根据JavaDoc,此代码应为50, 80
的{{1}}和x
坐标打印y
。
Circle
打印:
object CircleTestLauncher extends App{
Application.launch(classOf[CircleTest])
}
class CircleTest extends Application with App
{
override def start(p1: Stage): Unit = {
val c1= new Circle(50,80,10)
val sp=new Group
sp.getChildren.add(c1)
p1.setScene(new Scene(sp,300,300))
p1.show()
println("in start method, scene coord. of circle ="+c1.localToScene(Point2D.ZERO))
}
}
编辑:
接受的答案解决了这个问题,但是,根据this博客文章,我的解决方案也应该有效,问题仍然存在:为什么上述代码不起作用?
两个坐标之间有什么区别(getCenter vs localToScene)?
localToScene用于什么?
我用Google搜索并发现了很少的信息。
JavaFX书籍也没有解释这一点。
答案 0 :(得分:1)
我不确定它是如何在Scala中完成的,但在java中,以下代码工作正常
System.out.println("X :" +c1.getCenterX()+ " Y: "+c1.getCenterY());
输出
X :50.0 Y: 80.0
答案 1 :(得分:0)
以下是为什么的答案(我在JavaFX 8源代码中找到了这个答案)。
原因是local2Scene仅适用于转换。
所以圆的实际位置是它的中心加变换(中心坐标向量乘以变换矩阵)。
object CircleTestLauncher extends App{
Application.launch(classOf[CircleTest])
}
class CircleTest extends Application with App
{
override def start(p1: Stage): Unit = {
val c1= new Circle(50,80,10)
val sp=new Group
sp.getChildren.add(c1)
c1.setTranslateX(10)
c1.setTranslateY(20)
p1.setScene(new Scene(sp,300,300))
p1.show()
println("in start method, scene coord. of circle ="+c1.localToScene(Point2D.ZERO))
}
}
打印:
in start method, scene coord. of circle =Point2D [x = 10.0, y = 20.0]