JTree没有将节点添加到节点

时间:2018-11-18 23:01:16

标签: java swing nodes jtree

我正在制作一个程序,向我显示客户端计算机的文件和目录,而我通过使用JTree来做到这一点。当客户端向我发送目录和文件(如果是目录)时,我将创建一个节点并添加一个子节点,显示“正在加载”(除非他们单击该链接,否则该链接不可见,然后要求客户端提供下一组)文件/目录)。这样,我可以轻松地查看什么是文件,什么不是。

当我在C:/上运行它时,效果很好。但是,当我尝试单击C:/内的文件夹(如C:/Users)时,我得到了这些文件夹,但随后使Users节点成为文件节点,然后添加了子目录到C:/分支。像这样:

JTree

我可以解释Users文件夹成为文件(某种程度上)的原因,因为当它从客户端加载新文件时,从其中删除了“ Loading ...”子节点,但是它仍然没有解释为什么不将新节点添加到Users节点。这是执行此操作的代码行:nodes.get(nodes.indexOf(node)).add(thisDirectory); nodes是一个ArrayList,树中有每个节点。 node是当前节点(在这种情况下为User),而thisDirectory是子节点(与Bill类似)。这是用于更多上下文的整个功能:

// Add a directory node to array and JTree under previous node
private static void addDirectorySubfolder(String[] data, Boolean[] isDirectory, DefaultMutableTreeNode node) {
    for (int i = 0; i < data.length; i++) {
        DefaultMutableTreeNode thisDirectory = new DefaultMutableTreeNode(data[i]);
        if (isDirectory[i]) {
            thisDirectory.add(new DefaultMutableTreeNode("Loading..."));
            nodeDetails.add(true);
        }
        else
            nodeDetails.add(false);

        nodes.get(nodes.indexOf(node)).add(thisDirectory);
        nodes.get(nodes.indexOf(node)).remove(0);
        // Add node into tree
        DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
        DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
        root.add(thisDirectory);
        model.reload(root);

    }
}

String[] data是该节点下的所有文件/目录。 Boolean[] isDirectory是每个节点是否都是目录。就像我说的,node是选定的节点。

0 个答案:

没有答案