Сравнение пути редактирования узла 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) буду работать

Другие вопросы по тегам