簡體   English   中英

如何在 JavaFX 中刷新 TreeItem 的節點?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM