JavaFX使用GridPane创建游戏板

JavaFX使用GridPane创建游戏板,java,javafx,Java,Javafx,当应用程序运行时,游戏板显示良好,尽管单击互动程序时,文本始终显示在板的左上角[0][0] 我也在与逻辑作斗争。我有一个int board矩阵,它有一个函数makeMove,可以将玩家的移动添加到矩阵中,尽管我无法让玩家在矩阵上移动,也无法在平铺索引上打印相应的“O” 我如何创建一个可以传递一行、列索引和更改棋盘矩阵的函数,并在GUI上打印播放器片段(例如AI移动) 当玩家点击GUI互动程序,然后进行相应的移动时 到目前为止,我已经为GUI创建了一个GridPane,并在每个索引处添加了带有文本

当应用程序运行时,游戏板显示良好,尽管单击互动程序时,文本始终显示在板的左上角[0][0]

我也在与逻辑作斗争。我有一个int board矩阵,它有一个函数makeMove,可以将玩家的移动添加到矩阵中,尽管我无法让玩家在矩阵上移动,也无法在平铺索引上打印相应的“O”

我如何创建一个可以传递一行、列索引和更改棋盘矩阵的函数,并在GUI上打印播放器片段(例如AI移动)

当玩家点击GUI互动程序,然后进行相应的移动时

到目前为止,我已经为GUI创建了一个GridPane,并在每个索引处添加了带有文本的矩形

我创建了一个Board类,它构造了一个int Board矩阵来保存玩家的移动(P1,P2,空)

公共课程委员会{
专用int[][]电路板矩阵;
私人int板尺寸;
私有整数长度;
公用电路板(内部电路板尺寸、内部电路板长度){
this.board_matrix=新整数[board_size][board_size];
this.board_size=board_size;
this.win_length=win_length;
对于(int i=0;idrawMove(文本));
gameBoard.getChildren().addAll(平铺,文本);
}
}
返回游戏板;
}
公共无效drawMove(文本){
text.setText(“O”);
text.setFill(颜色为黑色);
}

如果要在
矩形上方添加
文本
对象
对象,请在
堆栈窗格中同时包装这两个对象

public Parent createBoard() {

    GridPane gameBoard = new GridPane();
    gameBoard.setPrefSize(755, 755);

    for (int i = 0; i < BOARD_SIZE; i++) {
        for (int j = 0; j < BOARD_SIZE; j++) {

            Rectangle tile = new Rectangle(50, 50);
            tile.setFill(Color.BURLYWOOD);
            tile.setStroke(Color.BLACK);

            Text text = new Text();
            text.setFont(Font.font(40));
            gameBoard.add(new StackPane(tile, text), j, i);

            //GridPane.setRowIndex(tile, i);
            //GridPane.setColumnIndex(tile, j);   
            //gameBoard.getChildren().addAll(tile, text);
            tile.setOnMouseClicked(event -> drawMove(text));
        }
    }
    return gameBoard;
}
public父createBoard(){
GridPane gameBoard=新建GridPane();
gameBoard.setPrefSize(755755);
对于(int i=0;idrawMove(文本));
}
}
返回游戏板;
}

在循环中,您设置的是“平铺”节点的行和列,而不是“文本”节点。因此,您的所有文本节点都位于0,0

您似乎希望平铺像c0der建议的那样是堆叠窗格。文本节点位于平铺顶部


我认为创建一个平铺对象(可能来自StackPane)并使用它来管理每个平铺是有意义的。它将负责显示的背景颜色和文本。现在还不清楚是否需要矩形。您可以只设置StackPane的背景和边框。

您的所有文本元素都放在其中单元格
(0,0)
。请注意,您可以使用
添加
方法来缩短分配索引所需的代码,而不是使用
静态
方法逐个分配索引:
gameBoard.add(tile,j,i);
发布的代码id不清楚(这两个类之间的关系是什么?)请发帖。同时把你的帖子集中在一个问题上。
public Parent createBoard() {

    GridPane gameBoard = new GridPane();
    gameBoard.setPrefSize(755, 755);

    for (int i = 0; i < BOARD_SIZE; i++) {
        for (int j = 0; j < BOARD_SIZE; j++) {

            Rectangle tile = new Rectangle(50, 50);
            tile.setFill(Color.BURLYWOOD);
            tile.setStroke(Color.BLACK);

            Text text = new Text();
            text.setFont(Font.font(40));
            gameBoard.add(new StackPane(tile, text), j, i);

            //GridPane.setRowIndex(tile, i);
            //GridPane.setColumnIndex(tile, j);   
            //gameBoard.getChildren().addAll(tile, text);
            tile.setOnMouseClicked(event -> drawMove(text));
        }
    }
    return gameBoard;
}