Сравнение пути редактирования узла JTree всегда верно
Я некоторое время работал над программой файлового сервера, и до сих пор я не мог публиковать здесь что-то для помощи. Но я не могу найти ничего по своей проблеме, и я очень смущен.
Я добавил всплывающее меню с возможностью создания новой папки верхнего уровня, которая на самом деле просто создает узел и после его редактирования отправляет свое имя на сервер для создания папки. В то время как у меня все редактирование работает правильно, и загрузка работает, у меня проблема.
Я изменяю JTree, чтобы он был редактируемым при создании папки, и цикл while, который продолжается до тех пор, пока этот узел не является редактируемым узлом, после чего он удаляет возможность редактирования из JTree.
public static void newTopFolder(){
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot(); //now we have the root
DefaultMutableTreeNode newFolder = new DefaultMutableTreeNode("New Folder");//will change to increment for duplicates
DefaultMutableTreeNode empty = new DefaultMutableTreeNode("< empty >"); //easier way to have empty folder, don't worry about it
tree.setEditable(true); //sets to editable
model.insertNodeInto(newFolder, root, root.getChildCount()); //adds folder to tree
model.insertNodeInto(empty, newFolder, newFolder.getChildCount()); //adds empty to tree, not real file
TreePath nfPath = getPath(newFolder); //so we don't call getPath extra times
tree.startEditingAtPath(nfPath); //automatically selects folder to edit
System.out.println(tree.getEditingPath().toString()+":"+nfPath.toString()+";"); //returns [\user\, New Folder]:[\user\, New Folder]; which shows the two are equal
while(tree.getEditingPath().equals(nfPath)){//when nothing is selected null if nothing is being edited, and path to other objects if selected
}
tree.setEditable(false); //changes to node will have been committed and editing disable
sendFolderToServer(nfPath); //sends folder to server after formatting as a String used in new File(Paths.get(nfPath));
}
К сожалению, время проверки tree.getEditingPath().equals(nfPath)
всегда возвращается true
Таким образом, он остается редактируемым.
Но я не понимаю, почему это остается правдой, это явно не должно. В случае, если это помогает / меняет что-либо, это выполняется в отдельном потоке (в противном случае цикл while остановит рендеринг графического интерфейса)
Итак, что я должен / могу сделать, есть ли лучший способ сделать это, или хотя бы один, который работает?
ОБНОВИТЬ:
Хотя я не нашел решения вышеописанной проблемы, если я вместо этого проверю tree.isPathSelected(nfPath)
Это прекрасно работает, и дерево настроено так, чтобы впоследствии его нельзя было редактировать!
1 ответ
Получить путь редактирования не удаляет переменную редактируемого пути... Поэтому после завершения редактирования последний отредактированный путь все еще остается правильным.
Вместо того, чтобы использовать tree.isPathSelected(path)
буду работать