0

我正在尝试在表视图上创建撤消重做功能。为此,我尝试制作可观察列表(表视图数据)的副本并将其保持为原始以供进一步参考。

    ObservableList<T> tableData = FXCollections.ObservableArrayList();
    table.setItems(tableData);
    ObservableList<T> originalList = FXCollections.observableArrayList(tableData);

    lblUndo.setOnMouseClicked((evt) -> {
            System.out.println("undo click == " + (originalList==data));
            System.out.println("undo click equals " + originalList.equals(data));
            table.setItems(originalList);
    });

    lblRedo.setOnMouseClicked((evt) -> {
            System.out.println("redo click " + originalList.equals(data));
            table.setItems(tableData);
    });

现在,我对 所做的任何更改都table应该只反映在tableData而不是originalList. 但是两个列表都带有更新的数据。

控制台中的输出是

undo click == false
undo click equals true
redo click true

如何维护不应更新的原始副本?

PS:我只有 Observable 列表tableData作为输入,无论我得到的值是什么来源tableData,我都不能使用相同的来源来填充originalList

4

0 回答 0