假設我將一個ChangeListener添加到TableView的itemsProperty中。 ChangeListener的更改方法何時會被調用?Strange TableView.itemsProperty行爲?
我試着添加到ListView的項目指向的空列表。結果 - ChangeListener的更改方法沒有被調用。
tableView.itemsProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue ov, Object t, Object t1) {
System.out.println("Changed!");
}
});
final ObservableList data = FXCollections.observableArrayList(new ArrayList());
data.clear();
//data.add(new Object()); don't call this yet
tableView.setItems(data);
data.clear();
data.add(new Object());
tableView.setItems(data);
但是,我也嘗試添加到一個空列表,然後讓TableView的項目指向它。結果 - ChangeListener更改後的方法被調用。
tableView.itemsProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue ov, Object t, Object t1) {
System.out.println("Changed!");
}
});
final ObservableList data = FXCollections.observableArrayList(new ArrayList());
data.clear();
data.add(new Object());
tableView.setItems(data);
data.clear();
data.add(new Object());
tableView.setItems(data);
我看着它在http://docs.oracle.com/javafx/2/api/javafx/scene/control/TableView.html#itemsProperty(),但它只是說「爲TableView中的底層數據模型。需要注意的是它有一個泛型類型,必須在自身的TableView的類型相匹配。」
我在問這個,因爲我可能錯過了其他一些重要的情況。
謝謝馬格斯,有一個錯誤。它不是tableView.add(new Object()),它是tableView.getItems()。add(new Object());我編輯了我的問題。無論如何,你能告訴爲什麼tableView.getItems()。add(new Object());沒有通知附加到tableView的itemsProperty的ChangeListener? –
你可以添加其餘的代碼嗎?特別是changelistener集。因爲在我的項目中,它完美地工作... – Magcus
好吧,我會嘗試在一段時間內編輯我的問題。 –