`
canyue_2007
  • 浏览: 5476 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

jTree打造硬盘文件目录树

阅读更多

方案一:用递归遍历整个硬盘文件,并添加子节点

    可行度:底            原因:因为要遍历整个硬盘,速度很慢


方案二:在节点展开时动态添加子节点
   
    可行度:高            原因:弥补了方案一的缺陷

 

 

 

方案一的关键代码:  

 

private static final String []_root = {"A:","B:","C:","D:","E:","F:","G:",
                                          "H:","I:","J:","K:","L:","M:","N:",
                                          "O:","P:","Q:","R:","S:","T:","U:",
                                          "V:","W:","X:","Y:","Z:"};        
DefaultMutableTreeNode top = new DefaultMutableTreeNode("My Computer..."); ;
for(int i=0;i<_root.length;i++){
     File f = new File(_root[i]);
     if(f.isDirectory()){
           DefaultMutableTreeNode tempnode = new DefaultMutableTreeNode(_root[i]);
           top.add(tempnode);
           traversalNode(tempnode);  //遍历添加子节点
     }
}
jTree1 = new JTree(top);
public void traversalNode(DefaultMutableTreeNode dmtnf){
        DefaultMutableTreeNode tempNode_p = dmtnf;
        DefaultMutableTreeNode tempNode_c;
        File ff = new File(f.toString());
        for(int i=0;i<ff.listFiles().length;i++){
            if(ff.listFiles()[i].isDirectory()){
                DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(ff.listFiles()[i].toString());
                tempNode_c = traversalNode(childNode);
                tempNode_p.add(tempNode_c);
            }else{
                tempNode_c = new DefaultMutableTreeNode(ff.listFiles()[i]);
                tempNode_p.add(tempNode_c);
            }
        }
}
 

 方案二关键代码:

     方案二中增加了为排序和右键菜单(当将要展开时调用traversalNode)

 public static final String TEMP_FILE_NAME = "   ###!!!";//菜单展开前添加子节点使其可以被展开


 public void traversalNode(DefaultMutableTreeNode parentNode){
        DefaultMutableTreeNode tempNode_p = parentNode;
        DefaultMutableTreeNode tempNode_c;

        if(tempNode_p.getChildCount()==0){
            return ;
        }
        if(tempNode_p.getFirstChild().toString().equals(Traversal.TEMP_FILE_NAME)){
            tempNode_p.removeAllChildren();
            File parentf = new File(tempNode_p.toString());
            File[] filelist = parentf.listFiles();
            File[] fileDirectory = new File[filelist.length];
            File[] file = new File[filelist.length];
            int num_Directory = 0;
            int temp_d = 0;
            int temp_f = 0;
            for (int i = 0; i < filelist.length; i++) {
                if (filelist[i].isDirectory()) {
                    fileDirectory[temp_d] = filelist[i];
                    num_Directory++;
                    temp_d++;
                } else {
                    file[temp_f] = filelist[i];
                    temp_f++;
                }
            }
            fileDirectory = this.indexFiles(fileDirectory, num_Directory);
            file = this.indexFiles(file, filelist.length - num_Directory);

            for (int i = 0; i < num_Directory; i++) {
                tempNode_c = new DefaultMutableTreeNode(fileDirectory[i].toString());
                tempNode_p.add(tempNode_c);
                tempNode_c.add(new DefaultMutableTreeNode(Traversal.TEMP_FILE_NAME));
            }
            for (int i = 0; i < filelist.length - num_Directory; i++) {

                tempNode_c = new DefaultMutableTreeNode(file[i].toString());
                tempNode_p.add(tempNode_c);
            }
        }
        return ;
    }

    private File[] indexFiles(File []f_p,int num_p){
        File []f = f_p;
        int num = num_p;
        for(int i=0;i<num;i++){
            for(int j=num-1;j>i;j--){
                File temp ;
                if(f[i].toString().compareToIgnoreCase(f[j].toString())>0){
                    temp = f[j];
                    f[j] = f[i];
                    f[i] = temp;
                }
            }
        }
        return f;
    }

 获得根目录和为jTree添加时间监听器

        DefaultMutableTreeNode top = new DefaultMutableTreeNode("My Computer..."); 
        for(int i=0;i<_root.length;i++){
            File f = new File(_root[i]);

            if(f.isDirectory()){
                DefaultMutableTreeNode tempnode = new DefaultMutableTreeNode(_root[i]);
                tempnode.add(new DefaultMutableTreeNode(Traversal.TEMP_FILE_NAME));
                top.add(tempnode);
            }
        }

        jTree1 = new JTree(top);
        jTree1.addMouseListener(new MyPanel_local_jTree1_MouseListener(this));
        jTree1.addTreeWillExpandListener(new MyPanel_local_jTree1_WillExpandLIsterner(this));
        this.jp1.updateUI();
        jscro1.getViewport().add(jTree1);

 当鼠标点击时

    public void jTree1_MouseListener(MouseEvent event) {
        if(event.getClickCount()==1){
            DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) jTree1.getSelectionPath().getLastPathComponent();
            new Traversal("").traversalNode(treeNode);
        }
   }

 

当鼠标右击时

   public void jTree1_RightMouseListener(MouseEvent event){
       jTree1.add(jPopupMenu1);
       TreePath path = jTree1.getPathForLocation(event.getX(), event.getY());
       if(path == null)
           return;
       jTree1.setSelectionPath(path);
       DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) jTree1.getSelectionPath().getLastPathComponent();
       if(treeNode.getChildCount()>0)
           return;
       jPopupMenu1.show(event.getComponent(),event.getX(),event.getY());
   }

 

当将要展开时

   public void jTree1_WillExpandListener(TreeExpansionEvent event){
       DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) event.getPath().getLastPathComponent();
       new Traversal("").traversalNode(treeNode);
   }

 

 

以上只是部分代码,如需完整代码,请致电canyue_2007@163.com

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics