简体   繁体   English

如何在 JavaFX 中刷新 TreeItem 的节点?

[英]How to refresh a TreeItem's nodes in JavaFX?

I have a TreeView that displays a list of servers and a list of databases under each server, so it looks something like this:我有一个 TreeView 显示服务器列表和每个服务器下的数据库列表,所以它看起来像这样:

-localhost
---database1
---database2
---database3
-remotehost
---database4
---database5
---database6

The databases in each server are not populated until the treeitem of that server is selected(to save load time).在选择该服务器的树项之前,不会填充每个服务器中的数据库(以节省加载时间)。 Now, when a different server becomes selected, I want to refresh the list of databases on that newly selected server. Now, when a different server becomes selected, I want to refresh the list of databases on that newly selected server. Currently, my script only adds the list of dbs to the newly selected server but doesn't remove the dbs that were already there, even though I have the script to remove them in place.目前,我的脚本只将 dbs 列表添加到新选择的服务器,但不会删除已经存在的 dbs,即使我有将它们删除的脚本。 What am I doing wrong?我究竟做错了什么?

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

I dont get any errors.我没有收到任何错误。 The nodes are just never removed.节点永远不会被删除。 Thanks in advance.提前致谢。

Strangely enough, selectedItem.getChildren().clear() did the trick.奇怪的是, selectedItem.getChildren().clear()做到了。 I'm not sure what the difference between clear() and removeAll() is, but clear() works.我不确定 clear() 和 removeAll() 之间的区别是什么,但 clear() 有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM