2015-09-19 72 views
0

我正在使用JTree制作文件浏览器。我需要重命名一个目录(文件夹)。到目前为止,我已经成功地重命名了目录,但我不能重命名该节点。这是我到目前为止:如何重命名JTree中的目录?

public TreePath findTreePath(File find) { 
    for (int ii = 0; ii < tree.getRowCount(); ii++) { 
     TreePath treePath = tree.getPathForRow(ii); 
     Object object = treePath.getLastPathComponent(); 
     DefaultMutableTreeNode node = (DefaultMutableTreeNode) object; 
     File nodeFile = (File) node.getUserObject(); 

     if (nodeFile == find) { 
      return treePath; 
     } 
    } 
    // not found! 
    return null; 
} 

private void renameFile() { 
     if (currentFile==null) { 
      showErrorMessage("No file selected to rename.","Select File"); 
      return; 
     } 

     String renameTo = JOptionPane.showInputDialog(gui, "New Name"); 
     if (renameTo!=null) { 
      try { 
       boolean directory = currentFile.isDirectory(); 
       TreePath parentPath = findTreePath(currentFile.getParentFile()); 
       DefaultMutableTreeNode parentNode = 
        (DefaultMutableTreeNode)parentPath.getLastPathComponent(); 

       boolean renamed = currentFile.renameTo(new File(
        currentFile.getParentFile(), renameTo)); 
       if (renamed) { 
        if (directory) { 
         // rename the node.. 

         // delete the current node.. 
         TreePath currentPath = findTreePath(currentFile); 
         System.out.println(currentPath); 
         DefaultMutableTreeNode currentNode = 
          (DefaultMutableTreeNode)currentPath.getLastPathComponent(); 

         treeModel.removeNodeFromParent(currentNode); 

         treeModel.reload(); 
         // add a new node.. 
        } 

        showChildren(parentNode); 
       } else { 
        String msg = "The file '" + 
         currentFile + 
         "' could not be renamed."; 
        showErrorMessage(msg,"Rename Failed"); 
       } 
      } catch(Throwable t) { 
       showThrowable(t); 
      } 
     } 
     gui.repaint(); 
} 

currentFile是我想要重命名的文件夹。除了重命名文件夹的可视化之外,一切都可以使用我会很感激,如果有人能帮助我。

回答

0

好吧,我想通了:

if (directory) { 

       File oldFile = fmng.currentFile; 
       File newFile = new File(oldFile.getParent(), renameTo); 
       Files.move(oldFile.toPath(), newFile.toPath()); 

       //System.out.println("path" + newFile.getPath()); 

       TreePath currentPath = fmng.findTreePath(fmng.currentFile); 
       //System.out.println(currentPath); 
       DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) currentPath.getLastPathComponent(); 

       fmng.treeModel.removeNodeFromParent(currentNode); 

       DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(newFile); 
       fmng.treeModel.insertNodeInto(newNode, parentNode, parentNode.getChildCount()); 

       //fmng.setFileDetails(newFile); 
       renamed = true; 
      } else { 
       renamed = fmng.currentFile.renameTo(new File(fmng.currentFile.getParentFile(), renameTo)); 
      } 
      if (renamed) { 
       fmng.showChildren(parentNode); 
      } else { 
       String msg = "The file '" + fmng.currentFile + "' could not be renamed."; 
       fmng.showErrorMessage(msg, "Rename Failed"); 
      } 

我不得不改变重命名方法,然后删除并重新添加节点。

0

修改JTree以显示更改后,您需要调用updateUI方法。

例:tree.updateUI();