I've been working on a file server program for a while, and thus far I've been able to avoid posting something here for help. But I cannot find anything on my problem and I am very confused.
I've added a popup menu with the option to create new top level folder, which really just creates a node and, after its edited sends its name to the server to create the folder. While I've got all of the editing working correctly and have the upload working, I am having a problem.
I change the JTree to be editable when the folder is created, and a while loop that continues until that node is not the one being edited, at which point it removes edit-ability from the 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));
}
Unfortunately, the while check tree.getEditingPath().equals(nfPath)
always returns true
, thus it remains editable.
But I don't understand why it remains true, it clearly shouldn't. In case it helps/ changes anything, this is run in a separate thread (otherwise the while loop would stop the GUI from rendering)
So what should / can I do, is there a better way to do this, or at least one that works?
UPDATE:
While I haven't found a solution to the clear problem above, If I instead test for tree.isPathSelected(nfPath)
That works fine and the tree is set to not be editable afterward!