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