0

javafx.scene.control.ListView<Todo>コントロールを更新できません。ご覧のとおり、リストビューには見出しプロパティが表示されます。todo の見出しを変更しても、リスト ビューにはまだ古い値が表示されます。

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);
}
4

1 に答える 1