JavaFx无法在Scene上获得stackPane位置

时间:2017-05-01 21:21:00

标签: javafx nodes bounds

我有一个扩展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:抱歉英文不好。不是母语

1 个答案:

答案 0 :(得分:3)

您不应该使用translateX / Y来设置商品的位置。 translateX / Y应该只用于项目的临时移动,例如反弹效果或过渡。 layoutX / Y应该用于设置项目的位置。通常布局X / Y将由布局窗格自动设置。如果您没有使用布局窗格并在非托管父级(例如窗格或组)中手动执行布局,则可以根据需要手动设置layoutX / Y值(relocate将这样做。)

切换到设置布局值而不是转换值后,可以使用localToScene函数确定场景中任何节点的位置。

Bounds boundsInScene = node.localToScene(node.getLayoutBounds());