我正在尝试使用JavaFX创建一个国际象棋游戏,我发现在历史成功打印之后,让匹配历史非常棘手,我试图增加回归某些董事会状态的可能性。
我试过这种方式,但它不起作用: 第一部分是我的控制器初始化函数
的片段 table.setRowFactory( tv -> {
TableRow<Move> move = new TableRow<Move>();
move.setOnMouseClicked(event -> {
if(event.getClickCount()==2 && !move.isEmpty())
setBoardTo(move.getItem());
else
System.out.println("kek");
});
return move;
});
然后我们有了我们进入的功能(它可以工作),但即使将棋盘更改为另一个并重新绘制它,它看起来也是一样的。
private void setBoardTo(Move move){
System.out.println(move.boardState.toString());
System.out.println(board.toString());
board.setBoard(move.boardState);
board.draw();
}
我用于分配值的Board类中的函数。
public void setBoard(Board another){
this.boardFigures = another.boardFigures;
this.highlightedFields = another.highlightedFields;
this.hasHighlightedFields = another.hasHighlightedFields;
}
最后一部分只是我的Move类的一个片段(它包含有关移动的信息,但我将其剪掉,因此代码看起来更干净)
public class Move {
private static int globalID=0;
public int ID;
final Board boardState;
public Move(Board board){
ID=globalID++;
boardState = new Board(board);}
我做错了什么?如果还需要其他任何东西,我会尽快粘贴它。
感谢,roiek
答案 0 :(得分:0)
很难看出你与有限的代码有什么关系,但是你提到你想保留历史但是有这个代码:
public void setBoard(Board another){
this.boardFigures = another.boardFigures;
this.highlightedFields = another.highlightedFields;
this.hasHighlightedFields = another.hasHighlightedFields;
}
如果这些不是原始值,问题是您不是要复制对象的值,而是存储对该对象的引用。如果该对象将来发生变化,那么当您指向更新的对象时,历史记录将不会被保留。
如果这是问题,您需要对要保留的对象进行实际复制。有关复制对象的详细信息,请参阅this example,并详细了解object references here。