删除Java JTree结构的节点子节点

Shi*_*TCo 0 java swing jtree jtreetable

我有一个ftp程序,每次扩展时检索文件夹数据.它通过使用这样的模型来做到这一点:


    private void FilesTreeTreeExpanded(javax.swing.event.TreeExpansionEvent evt) {
String path = new String("");

 DefaultMutableTreeNode chosen = (DefaultMutableTreeNode) evt.getPath().getLastPathComponent();

 String[] pathArray = evt.getPath().toString().replaceAll("]", "").split(",");
 for (int i = 1 ; i < pathArray.length ; i++) path += "/"+ pathArray[i].trim();
Run Code Online (Sandbox Code Playgroud)

//我被选中了.removeAllChildren(); 没有成功ftp.GoTo(路径);

ArrayList listDir = null; listDir = ftp.ListDir(); ArrayList listFiles = null; listFiles = ftp.ListFiles(); DefaultMutableTreeNode child = null,dir = null,X = null; //这会将文件添加到树中(int i = 0; i <listFiles.size(); i ++){child = new DefaultMutableTreeNode(listFiles.get(i)); if(listFiles.size()> 0)model.insertNodeInto(child,selected,0); } //这将为列表添加dirs(int i = 0; i <listDir.size(); i ++){X = new DirBranch("درحالدریافتاطلاعات...").node(); dir = new DirBranch((String)listDir.get(i)).node(); dir.add(X); if(listDir.size()> 0)model.insertNodeInto(dir,selected,0); } FilesTree.setModel(model); //这是我的Swing JTree}

问题是我每次扩展JTree时都会重复文件和文件夹列表.所以我试图使用selected.removeAllChildren(); @代码的顶部,但它没有删除任何东西.我该怎么办?

Dev*_*ler 6

您的模型是正确的,但JTree正在使用旧信息.

removeAllChildren()方法删除了子节点,但它不会触发任何事件,并且model.insertNodeInto()会触发插入事件.因此,JTree看到添加的节点,但从未看到删除的节点.

添加新子项后,尝试调用model.reload(chosen)以使下面的树无效chosen.

由于您将重新加载分支,您也可以更改model.insertNodeInto(dir, chosen,0)chosen.insert(dir,0).这减少了发布的事件数量.