我有一个TreeView,它显示每个服务器下的服务器列表和数据库列表,所以它看起来像这样:
-localhost
---database1
---database2
---database3
-remotehost
---database4
---database5
---database6
在选择该服务器的treeitem(以节省加载时间)之前,不会填充每个服务器中的数据库。现在,当选择其他服务器时,我想刷新新选择的服务器上的数据库列表。目前,我的脚本只将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);
}
}
}
}
});
我没有收到任何错误。永远不会删除节点。提前谢谢。
答案 0 :(得分:0)
奇怪的是,selectedItem.getChildren().clear()
做了伎俩。我不确定clear()和removeAll()之间的区别是什么,但clear()有效。