如何在JavaFX 8中获取节点的场景坐标? localToScene似乎不起作用

时间:2014-04-03 10:51:02

标签: java javafx

下面的(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书籍也没有解释这一点。

2 个答案:

答案 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]