テーブル ビューでやり直し機能を作成しようとしています。このために、観察可能なリスト(テーブルビューデータ)のコピーを作成し、それを元の状態に維持して、さらに参照できるようにしました。
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
。