[英]How to refresh a TreeItem's nodes in JavaFX?
我有一個 TreeView 顯示服務器列表和每個服務器下的數據庫列表,所以它看起來像這樣:
-localhost
---database1
---database2
---database3
-remotehost
---database4
---database5
---database6
在選擇該服務器的樹項之前,不會填充每個服務器中的數據庫(以節省加載時間)。 Now, when a different server becomes selected, I want to refresh the list of databases on that newly selected server. 目前,我的腳本只將 dbs 列表添加到新選擇的服務器,但不會刪除已經存在的 dbs,即使我有將它們刪除的腳本。 我究竟做錯了什么?
connTree.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() {
@SuppressWarnings("unchecked")
@Override
public void changed(
ObservableValue<? extends TreeItem<String>> observable,
TreeItem<String> old_val, TreeItem<String> new_val) {
TreeItem<String> selectedItem = new_val;
String selectedHost = selectedItem.getValue();
if (selectedHost != "test") {
if (conns.exists(selectedHost)) {
selectedServer = conns.get(selectedHost);
selectedServer.getDatabases();
List<String> dbs = selectedServer.databases;
TreeItem<String> c = connTree.getSelectionModel().getSelectedItem();
c.getChildren().removeAll(c); //This should do what I want, right?
for (String db: dbs) {
Button dbIcon = new Button("", new Glyph("FontAwesome", "DATABASE"));
dbIcon.setBackground(Background.EMPTY);
TreeItem<String> branch = new TreeItem<String>(db, dbIcon);
branch.setExpanded(true);
selectedItem.getChildren().add(branch);
}
}
}
}
});
我沒有收到任何錯誤。 節點永遠不會被刪除。 提前致謝。
奇怪的是, selectedItem.getChildren().clear()
做到了。 我不確定 clear() 和 removeAll() 之間的區別是什么,但 clear() 有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.