2014-09-02 51 views
-1

我想创建一个JCheckBox的选择驱动器资源管理器将显示使用的JTree就像为Windows文件浏览器的计算机的所有驱动器,文件夹和文件:驱动器资源管理器使用的JTree

enter image description here

这一点我这样做:

enter image description here

public class NewJFrame extends javax.swing.JFrame { 

    DefaultMutableTreeNode nodes; 
    public NewJFrame() { 
     nodes = new DefaultMutableTreeNode("Root", true); 
     addRoots(nodes); 
     initComponents(); 
     jTree1.setRootVisible(false); 

    } 

    public void addRoots(DefaultMutableTreeNode parent){ 
     File roots[] = File.listRoots(); 
     for(File root: roots){ 
      DefaultMutableTreeNode child = new DefaultMutableTreeNode(root); 
      child.add(new DefaultMutableTreeNode("test")); 
      parent.add(child); 
     } 
    } 

    private void initComponents() { 

     jScrollPane1 = new javax.swing.JScrollPane(); 
     jTree1 = new javax.swing.JTree(nodes); 
     //....... 
     //....... 
    } 

}

+0

您的问题是什么? – StanislavL 2014-09-02 11:06:11

+2

请参阅@AndrewThompson的[FileBrowser](http://codereview.stackexchange.com/questions/4446/file-browser-gui)从一些想法。并且请_do_实际提出一个问题,因为这是一个问答网站。您的帖子似乎更像是一个个人的愿望,而不是实际的问题 – 2014-09-02 11:11:02

+0

如果我在创建树的所有节点后创建JTree,则需要太多时间。像5个munites。我想动态创建它。当有人点击C:\时,只有它会动态添加C:\下的所有目录和文件。 – AM26 2014-09-02 11:12:19

回答

0

为了解决您的问题(动态添加节点 - >在评论中描述),您可以使用虚拟节点和TreeListener。
虚拟节点(在这种情况下)用于假的现有的孩子。
在TreeNodeExpand-Event中,您可以检查展开的节点是否只有一个虚拟孩子,然后您可以即时创建REAL子节点。

这意味着,对于您获得的每个文件夹,您将创建一个新节点,其中包含一个DUMMY子节点(用于伪造现有子节点)。 然后,展开时,删除虚拟节点并添加REAL节点。 (与您获取当前目录的所有文件夹相同)