在GridPane JavaFx中选择单元格

时间:2018-06-17 20:41:12

标签: java javafx

长话短说,我有8x8 GridPane(用它作为国际象棋棋盘),我希望能够点击每个单元格并获得它的坐标。

public class BoardView {     
    private ImageView imageView = new ImageView(new Image("board.png"));
    private GridPane boardGrid = new GridPane();

    public void createBoard(){
        boardGrid.getChildren().add(imageView);
        for(int i =0;i < 8; i++){
            for(int j = 0; j < 8; j++){
                Tile tile = new Tile(i, j);
                GridPane.setConstraints(tile.getPane(), i, j);
                boardGrid.getChildren().add(tile.getPane());
            }
        }

    }

    class Tile {
        private int positionX;
        private int positionY;
        private Pane pane;

        Tile(int x, int y) {
            pane = new Pane();                
            positionX = x;
            positionY = y;
            pane.setOnMouseClicked(e -> {
                        System.out.println(positionX + " " + positionY);
                    }
            );
        }
    }

但是,在我点击的任何地方,结果都是“0 0”,而不是实际的行/列位置。

1 个答案:

答案 0 :(得分:1)

你的代码不完整,你的一些错误是:

  1. 您尚未在每个窗格(瓷砖)上给出特定尺寸(宽度,高度)

  2. 我猜你在某处设置了GridPane的大小,但它只是一个猜测,现在你在网格上添加背景图像的方式是我不建议使用StackPane。< / p>

  3. 这是一个小例子,您可以检查以调试您的问题。

    Item::Item()

    从我的角度来看,如果你让类扩展Pane而不仅仅是对它进行引用,那么你更容易处理每个Tile,但这只是我的观点。以上就是它的一个例子。如果你找不到问题然后发布MCVE节目,我们可以帮助你更好。