JavaFX覆盖对象

时间:2015-05-19 18:35:59

标签: java javafx javafx-8

我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

很难看出你与有限的代码有什么关系,但是你提到你想保留历史但是有这个代码:

public void setBoard(Board another){
  this.boardFigures = another.boardFigures;
  this.highlightedFields = another.highlightedFields;
  this.hasHighlightedFields = another.hasHighlightedFields;
}

如果这些不是原始值,问题是您不是要复制对象的值,而是存储对该对象的引用。如果该对象将来发生变化,那么当您指向更新的对象时,历史记录将不会被保留。

如果这是问题,您需要对要保留的对象进行实际复制。有关复制对象的详细信息,请参阅this example,并详细了解object references here