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