为什么translateX和translateY在我的场景中位置不好?我开始坐标x = 100 y = 200 in real my real coordinate y = -24.8 ...为什么?我的ImageView是什么时候需要真正的坐标?
primaryStage.setTitle("Title");
Group root = new Group();
Scene scene = new Scene(root, 800, 600, Color.WHITE);
// border.prefHeightProperty().bind(scene.heightProperty());
//border.prefWidthProperty().bind(scene.widthProperty());
Image im = new Image("Images/universe.jpg", 800, 600, true, true);
ImageView iv = new ImageView(im);
Image iv1 = new Image("Images/Asteroid.png", 60, 50, false, false);
ImageView iv2 = new ImageView(iv1);
iv2.setX(100);
iv2.setY(200);
Path p = new Path();
p.getElements().add(new MoveTo(100, 200));
p.getElements().add(new LineTo(200, 400));
PathTransition pt = new PathTransition(Duration.millis(10000), p);
pt.setNode(iv2);
root.getChildren().add(iv2);
DoubleProperty xValue = new SimpleDoubleProperty();
xValue.bind(iv2.translateXProperty());
xValue.addListener(new ChangeListener() {
@Override
public void changed(ObservableValue ov, Object t, Object t1) {
// System.out.println((double) t1);
}
});
DoubleProperty yValue = new SimpleDoubleProperty();
yValue.bind(iv2.translateYProperty());
yValue.addListener(new ChangeListener() {
@Override
public void changed(ObservableValue ov, Object t, Object t1) {
System.out.println((double) t1);
}
});
pt.play();
primaryStage.setScene(scene);
primaryStage.show();
}
答案 0 :(得分:2)
我不知道"真正的坐标"意思是:你想要哪个坐标系(屏幕,场景,父节点,节点......)?
您显示的值是translateY
属性;它是垂直平移节点的数量。所以-24.8意味着它从原来的位置移动了24.8个单位。
您可以查看boundsInParent
属性,该属性告诉您父坐标系中节点的边界,包括任何变换(例如平移)。 boundsInLocal
属性是其自身坐标系中节点的边界,并不包含任何变换。
如果要在场景或屏幕坐标中获取节点的边界,可以使用多种localToScene(...)
或localToScreen(...)
方法中的一种进行转换。
更新:例如,要跟踪场景坐标中图像的边界,您可以执行以下操作:
ChangeListener<Number> listener = new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> ov, Number oldValue, Number newValue) {
Bounds boundsInScene = iv2.localToScene(iv2.getBoundsInLocal());
double xInScene = boundsInScene.getMinX();
double yInScene = boundsInScene.getMinY();
// do something with values...
}
});
iv2.translateXProperty().addListener(listener);
iv2.translateYProperty().addListener(listener);
阅读Javadocs for Node
了解更多详情。