删除Java JTree结构的节点子节点
我有一个ftp程序,每次展开时检索文件夹数据。它通过使用如下模型来实现这一点:删除Java JTree结构的节点子节点,java,swing,jtree,jtreetable,Java,Swing,Jtree,Jtreetable,我有一个ftp程序,每次展开时检索文件夹数据。它通过使用如下模型来实现这一点: 私有void filestreeexpanded(javax.swing.event.treeeexpansionevent evt){ 字符串路径=新字符串(“”) DefaultMutableTreeNode Selected=(DefaultMutableTreeNode)evt.getPath().getLastPathComponent(); 字符串[]pathArray=evt.getPath().to
私有void filestreeexpanded(javax.swing.event.treeeexpansionevent evt){
字符串路径=新字符串(“”)
DefaultMutableTreeNode Selected=(DefaultMutableTreeNode)evt.getPath().getLastPathComponent();
字符串[]pathArray=evt.getPath().toString().replaceAll(“]”,“).split(“,”);
对于(int i=1;i
//我被选中了。除掉所有的孩子;没有成功
ftp.GoTo(路径)
ArrayList listDir=null;
listDir=ftp.listDir();
ArrayList listFiles=null;
listFiles=ftp.listFiles();
DefaultMutableTreeNode child=null,dir=null,X=null;
//这将向树中添加文件
对于(int i=0;i0)
model.insertNodeInto(子级,已选择,0);
}
//这将把目录添加到列表中
对于(int i=0;i0)
model.insertNodeInto(dir,selected,0);
}
FilesTree.setModel(model);//这是我的Swing JTree
}
问题是每次我展开JTree-it文件和文件夹的重复列表时。所以我尝试使用selected.removeAllChildren()@代码的顶部,但没有删除任何内容。我该怎么办?调用
removeAllChildren()
将从节点中删除子节点。这里肯定还有其他事情在发生,那就是创建副本。确保您没有两次调用任何内容,并且正在刷新树的显示。您的模型是正确的,但JTree是根据旧信息操作的
removeallchildrent()
方法删除子项,但它不会触发任何事件,而model.insertNodeInto()
会触发插入事件。因此,JTree可以看到添加的节点,但从来没有看到删除的节点
添加新子级后,尝试调用model.reload(selected)
以使selected
下面的树无效
由于将重新加载分支,因此还可以将
model.insertNodeInto(dir,selected,0)
更改为selected.insert(dir,0)
。这减少了发布事件的数量。在我的应用程序中,我也遇到了同样的问题。为此,我只使用了以下代码
它会从我的Jtree中删除所有子节点。我的代码每次都会添加目录侦听。因此,首先我必须清理节点,然后再次添加文件夹。
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();
JTree.removeAll();
JTree.setModel(null);