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