原來,這FXCollections.observableArrayList()
是創造我的列表的淺表副本的出現當我真正想要的深層複製。 this.value
和value
「指向」兩個不同的ObservableList
s,但它們包含「指向」同一個對象而不是副本。
原始
至於應用,我使得用戶可以打開一個ObservableList
的內容和編輯它的一部分。爲了讓他們取消並放棄任何更改,我製作了這個ObservableList
的副本,讓他們在副本上工作。然後,如果他們選擇保存更改,我使用副本的內容更新ObservableList
的變量。
複製使用下面的功能setValues
完成。該功能屬於編輯窗口的fx控制器,由主窗口的控制器調用。
public void setValues(ObservableList<String[]> values) {
if (values == null) {
this.values = FXCollections.observableArrayList();
} else {
this.values = FXCollections.observableArrayList(values);
}
lstView.setItems(this.values);
}
至於我有蜜蜂能找到,上面的代碼應該創建的values
副本,以便this.values
和values
包含相同的信息,但也不盡相同ObservableList。 但是,實際上這兩個仍然看起來是同一個對象,所以對this.values
的任何更改也將作出values
。
這是唯一給this.value
分配一個值的地方。任何人有什麼想法我做錯了什麼?
這是所有使用JavaFX和Java 8
你爲什麼說是同一個對象?你打印兩個對象的'toString()'是否一樣? –
@ easyjoin.net,我在調試模式下運行應用程序,並在更改保存到「複製」的行上設置了斷點。當我瀏覽代碼時,我正在查看內存,並且可以看到原來的內容和「副本」,只有「副本」纔會發生變化。 – user9985
然後錯誤發生在另一個地方,而不是您發佈的代碼。 –