0
我無法更新我的javafx.scene.control.ListView<Todo>
控件。 正如你所看到的,listview顯示標題屬性。 當我更改待辦事項的標題時,列表視圖仍顯示舊值。更新列表 - 查看模型更改
public class Todo {
private StringProperty headline = new SimpleStringProperty();
private StringProperty description = new SimpleStringProperty();
public Todo(String aHeadline) {
this.setHeadline(aHeadline);
}
public Todo(String aHeadline, String aDescription) {
this(aHeadline);
this.description.set(aDescription);
}
public String getDescription() {
return this.description.get();
}
public StringProperty descriptionProperty() {
return this.description;
}
public void setDescription(String aDescription) {
this.description.set(aDescription);
}
public String getHeadline() {
return this.headline.get();
}
public void setHeadline(String aHeadline) {
this.headline.set(aHeadline);
}
public static ObservableList<Todo> getMockups() {
try {
return FXCollections.observableArrayList(TodoXmlParser.getTodosFromXml(Paths.get("/Todos.xml")));
} catch (JDOMException | IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public String toString() {
return this.headline.get();
}
}
this.listView = new ListView<>();
this.listView.setItems(Todo.getMockups());
this.listView.getSelectionModel().getSelectedItem().setHeadline("new");
我的思念像listview.refresh(), or update()
的方法 那麼,什麼是應該做的正確方法?
編輯:我覺得這樣的一種方式,但我會很高興,如果有人可以解釋這樣做的「官方」的方式。
void updateListView(Todo todo) {
int index = this.listView.getItems().indexOf(todo);
this.listView.getItems().remove(todo);
this.listView.getItems().add(index, todo);
}
感謝您的解決方法,但我希望有一個更好的方法來做到這一點。我會等幾天纔會接受你的回答。此外,我編輯我的帖子更輕鬆地更新特定項目的方式。 – Timo
找到了更好的方法,更新我的帖子。 – Marc
順便說一句,如果你只選擇一個項目,那麼你更新列表的方式更有效率......如果你有一個大的列表,並且如果你選擇了大量的項目,listView.getItems()。remove(selectedList )'會比刪除和重新添加列表花費更多時間,因爲它必須獲取列表中的所有事件。我最近陷入了這個坑......我希望現在一切正常。 – Marc