【问题标题】:Deleting node childs of a Java JTree structure删除 Java JTree 结构的子节点
【发布时间】:2011-08-03 04:39:55
【问题描述】:

我有一个 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();

// i were aded chosen.removeAllChildren(); without success ftp.GoTo(path);

ArrayList listDir = null; listDir = ftp.ListDir(); ArrayList listFiles = null; listFiles = ftp.ListFiles(); DefaultMutableTreeNode child = null , dir = null , X = null; //this will add files to tree for (int i = 0; i < listFiles.size(); i++) { child = new DefaultMutableTreeNode(listFiles.get(i)); if(listFiles.size() > 0) model.insertNodeInto(child, chosen, 0); } //this will add dirs to list for (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, chosen, 0); } FilesTree.setModel(model); //this is my Swing JTree }

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

【问题讨论】:

    标签: java swing jtree jtreetable


    【解决方案1】:

    在我的应用程序中,我也遇到了同样的问题。为此,我只使用了以下代码。

        JTree.removeAll();
        JTree.setModel(null);
    

    它从我的 Jtree 中删除所有子节点。

    【讨论】:

      【解决方案2】:

      您的模型是正确的,但 JTree 是在旧信息上运行的。

      removeAllChildren() 方法会移除子元素,但它不会触发任何事件,model.insertNodeInto() 会触发插入事件。因此,JTree 会看到正在添加的节点,但永远不会看到正在删除的节点。

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

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

      【讨论】:

        【解决方案3】:

        调用removeAllChildren() 将从节点中删除子节点。这里肯定发生了其他事情,正在创建重复项。确保您没有两次调用任何内容,并且您正在刷新树的显示。

        【讨论】:

        • 我的代码每次都会添加目录监听。所以首先我必须清理节点,然后再次添加文件夹。
        猜你喜欢
        • 1970-01-01
        • 2011-12-17
        • 1970-01-01
        • 1970-01-01
        • 2012-04-06
        • 1970-01-01
        • 2011-12-18
        • 1970-01-01
        • 2018-06-12
        相关资源
        最近更新 更多