JavaFX 覆盖对象
JavaFX overwrite object
我正在尝试使用 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 class 中我用来赋值的函数。
public void setBoard(Board another){
this.boardFigures = another.boardFigures;
this.highlightedFields = another.highlightedFields;
this.hasHighlightedFields = another.hasHighlightedFields;
}
最后一部分只是我的 Move 的一个片段 class(它包含有关 moves 的信息,但我将其删除以便代码看起来更干净)
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
很难看出您要使用有限的代码做什么,但是您提到您希望保留历史记录但随后有了以下代码:
public void setBoard(Board another){
this.boardFigures = another.boardFigures;
this.highlightedFields = another.highlightedFields;
this.hasHighlightedFields = another.hasHighlightedFields;
}
如果这些不是原始值,问题是您没有复制对象的值,而是存储了对该对象的引用。如果该对象将来发生变化,当您指向更新后的对象时,将不会保留历史记录。
如果这是问题所在,您需要对要保留的对象进行真正的复制。参见 this example for details about copying objects, and read more about object references here。
我正在尝试使用 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 class 中我用来赋值的函数。
public void setBoard(Board another){
this.boardFigures = another.boardFigures;
this.highlightedFields = another.highlightedFields;
this.hasHighlightedFields = another.hasHighlightedFields;
}
最后一部分只是我的 Move 的一个片段 class(它包含有关 moves 的信息,但我将其删除以便代码看起来更干净)
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
很难看出您要使用有限的代码做什么,但是您提到您希望保留历史记录但随后有了以下代码:
public void setBoard(Board another){
this.boardFigures = another.boardFigures;
this.highlightedFields = another.highlightedFields;
this.hasHighlightedFields = another.hasHighlightedFields;
}
如果这些不是原始值,问题是您没有复制对象的值,而是存储了对该对象的引用。如果该对象将来发生变化,当您指向更新后的对象时,将不会保留历史记录。
如果这是问题所在,您需要对要保留的对象进行真正的复制。参见 this example for details about copying objects, and read more about object references here。