Java 如何更新场景内部的网格窗格';s根群

Java 如何更新场景内部的网格窗格';s根群,java,javafx,Java,Javafx,我已经用Java编写了一个基于控制台的国际象棋游戏,现在想用JavaFx将其制作成一个GUI游戏。在主场景中,根是一个包含三个网格窗格的组:一个用于彩色正方形的矩形网格窗格,一个用于工件精灵的ImageView网格窗格,以及一个最终按钮网格窗格,以便用户可以在板上选择工件并将其移动到某个位置 现在,我想做的就是让我的场景在棋盘位置,然后在每次移动时显示相应的棋盘 显示线路板位置的代码起作用,因为每当我使用起始线路板位置组初始化场景根时,片段都会正确显示。问题是,玩家移动后,不会对显示内容进行任何

我已经用Java编写了一个基于控制台的国际象棋游戏,现在想用JavaFx将其制作成一个GUI游戏。在主场景中,根是一个包含三个网格窗格的组:一个用于彩色正方形的矩形网格窗格,一个用于工件精灵的ImageView网格窗格,以及一个最终按钮网格窗格,以便用户可以在板上选择工件并将其移动到某个位置

现在,我想做的就是让我的场景在棋盘位置,然后在每次移动时显示相应的棋盘

显示线路板位置的代码起作用,因为每当我使用起始线路板位置组初始化场景根时,片段都会正确显示。问题是,玩家移动后,不会对显示内容进行任何更改

虽然,在我加入董事会后,一切都没有改变。移动是在后端的实际线路板对象上进行的,但显示的线路板不会更新。它只是和上面一样

现在,我的start方法中的代码如下所示:

@Override
public void start(Stage primaryStage) throws Exception
{
    primaryStage.setTitle("Chess");
    primaryStage.setResizable(false);

    Player whitePlayer = new CPUPlayer(ChessColor.WHITE);
    Player blackPlayer = new CPUPlayer(ChessColor.BLACK);

    Board board = new Board();
    Scene scene = new Scene(board.root, 400.0, 400.0);

    Square startSquare = board.getSquare(1, 4);
    Square endSquare = board.getSquare(3, 4);

    //printing these out to prove move actually happens on board object
    board.printBoard();

    Move move = new Move(whitePlayer, startSquare, endSquare, board, MoveType.NORMAL);
    move.movePiece();
    //after this I have tried updating the entire Group containing all the GridPanes, 
    //as well as just the GridPane containing the piece ImageViews. Neither did anything.


    //printing these out to prove move actually happens on board object
    board.printBoard();

    primaryStage.setScene(scene);
    primaryStage.show();     
}
以下是我为片段精灵设置网格窗格的方式:

public GridPane setPieces()
{
    GridPane pieces = new GridPane();
    int printRow = 0;

    for (int i = 7; i >= 0; i--)
    {
        for (int j = 0; j < 8; j++)
        {
            pieces.add(new ImageView(rightImageForPiece(getSquare(i, j).getPiece())), j, printRow);   
        }
        printRow++;
    }

    return pieces;
} 
这是董事会的构造师:

Board()
{
    //just for the backend
    setNewBoard();

    //for javafx
    this.buttons = setButtons();
    this.squares = setSquares();
    this.pieces = setPieces();
    setRoot();
}
总之,在设置场景的组根之后,是否有一种方法可以更新单个网格窗格,以便它显示在棋盘上所做的更改


如果需要任何其他信息,请告诉我,因为这是我第一次在这里提问。

我解决了问题,我只需要添加将线路板更新到另一个线程的后端。

move.movePiece()的功能是什么?它是否以某种方式更新了用户界面?@James\u D:它没有。只有一个Board对象包含一个工件对象的2d数组。它只是更改该数组中工件对象的索引。或者(最佳方法)实现用于其在板上位置的工件,并让
board
类观察这些值并在它们更改时更新UI,或者,由于
move
对象引用了
board
,只需让
movePiece
在板上调用一个方法来更新一个块在UI中的位置即可。@James\u D:请原谅我的无知,因为我对JavaFx还比较陌生。当你说实现具有可观察属性的片段时,你是指我在我的板中的片段对象,还是指组成gridpane的片段精灵?请…当心M
Board()
{
    //just for the backend
    setNewBoard();

    //for javafx
    this.buttons = setButtons();
    this.squares = setSquares();
    this.pieces = setPieces();
    setRoot();
}