如何更新场景根组内的网格窗格



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

现在,我想要做的只是让我的场景占据一个棋盘位置,然后在每次移动时显示相应的棋盘。

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

证明电路板可以正确显示

虽然,在我搬上棋盘后,什么都没有改变。移动是在后端的实际板对象上进行的,但显示的板不会更新。它只是与上面相同。

证明后端更改

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

@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();     
}

这是我为作品精灵设置 GridPane 的方式:

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;
} 

这是我设置组根的方式:

public void setRoot()
{
Group root = new Group();
root.getChildren().add(squares);
root.getChildren().add(setPieces());
root.getChildren().add(buttons);
this.root = root;
}

这是电路板的构造函数:

Board()
{
//just for the backend
setNewBoard();
//for javafx
this.buttons = setButtons();
this.squares = setSquares();
this.pieces = setPieces();
setRoot();
}

总之,有没有办法,一旦我设置了场景的组根,就可以更新单个 GridPane,以便它显示在棋盘上所做的更改。

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

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

最新更新