JTree не добавляет узел к узлу - PullRequest
0 голосов
/ 19 ноября 2018

Я делаю программу, которая показывает мне файлы и каталоги компьютера клиента, и я делаю это, имея JTree.Когда клиент отправляет мне каталоги и файлы, если это каталог, я создаю узел и добавляю дочерний элемент с надписью «Загрузка» (который не виден, если не щелкнуть по нему, после чего он запрашивает у клиента следующий наборфайлов / каталогов).Таким образом, я легко вижу, что это за файл, а что нет.

Это прекрасно работает, когда я запускаю его на C:/.Однако, когда я пытаюсь щелкнуть по папке внутри C:/ (например, C:/Users), я получаю папки, но затем она делает узел Users файловым узлом, а затем добавляет подкаталоги в ветку C:/,Например:

JTree

Я могу объяснить, как папка Users становится файлом (в некоторой степени), поскольку я удаляю из нее подузел «Загрузка ...» при загрузкеновые файлы от клиента, но это все еще не объясняет, почему он не добавляет новые узлы к узлу 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, как я уже сказал, является выбранным узлом.

...