我有一个扩展StackPane的类。另一个制作这个类的20x20 2d阵列。然后我在现场的某处翻译了他们的位置。现在,我无法获得相对于场景的细胞位置。 我尝试了Bounds,Point2D.zero和getMin ..
cell.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
System.out.println("mouse click detected! " + mouseEvent.getSource());
// boundsInScene = cell.localToScene(cell.getLayoutBounds());
// System.out.println("Cell width: " + boundsInScene.getMinX());
// System.out.println("Cell height: " + boundsInScene.getMinY());
// cell.localToScene(Point2D.ZERO);
int x = (int) cell.getTranslateX();
int y = (int) cell.getTranslateY();
System.out.println("X: " + x + "y :" + y);
}
});
我的部分代码:
private Parent createContent() {
root = new Pane();
root.setPrefSize(640, 480);
for (int col = 0; col < y_Tiles; col++) {
for (int row = 0; row < x_Tiles; row++) {
cell = new Cell(row, col);
grid_Array[row][col] = cell;
cell.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {});
root.getChildren().add(cell);
}
}
return root;
}
Bounds正在重新使用480和400.另一件事是所有单元格都为我尝试的任何方法返回相同的输出。知道如何在场景中细胞化细胞的位置吗? PS:抱歉英文不好。不是母语
答案 0 :(得分:3)
您不应该使用translateX / Y来设置商品的位置。 translateX / Y应该只用于项目的临时移动,例如反弹效果或过渡。 layoutX / Y应该用于设置项目的位置。通常布局X / Y将由布局窗格自动设置。如果您没有使用布局窗格并在非托管父级(例如窗格或组)中手动执行布局,则可以根据需要手动设置layoutX / Y值(relocate将这样做。)
切换到设置布局值而不是转换值后,可以使用localToScene函数确定场景中任何节点的位置。
Bounds boundsInScene = node.localToScene(node.getLayoutBounds());