`
canyue_2007
  • 浏览: 5470 次
  • 性别: 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

分享到:
评论

相关推荐

    spring java图片上传源码.rar

    源码实现了图片上传功能,可供相关功能开发的小伙伴参考学习使用。

    新入职员工工作总结范文大全(篇).docx

    工作总结,新年计划,岗位总结,工作汇报,个人总结,述职报告,范文下载,新年总结,新建计划。

    本项目内容为《SpringBoot 2.X 基础教程》配套源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    IMG_20240426_195457.jpg

    IMG_20240426_195457.jpg

    培训看版.xlsx

    Excel数据看板,Excel办公模板,Excel模板下载,Excel数据统计,数据展示

    A Confidence-Guided Automated System for Non-emergency Calls.pdf

    A Confidence-Guided Automated System for Non-emergency Calls.pdf

    用于快速反馈控制律优化的梯度丰富机器学习控制matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    杭州电子科技大学数据结构数据结构讲义.pdf

    杭州电子科技大学,期末考试资料,计算机专业期末考试试卷,试卷及答案,数据结构。

    对保险业中人工智能的监管: 平衡消费者保护与创新.pdf

    对保险业中人工智能的监管: 平衡消费者保护与创新.pdf

    重庆大学电磁场原理10年考题(a卷)答案及评分标准.pdf

    重庆大学期末考试试卷,重大期末考试试题,试题及答案

    银行软件作业代码示例20240426

    震惊,师专男大竟然在夜深人静的夜晚写下了这些普通人都看不懂的东西,内容是...

    导航软件iApp源码V3+配置教程

    一款支持侧边导航栏的网页导航APP源码,风格简约为主,可以通过远程文档进行远程控制列表,浏览器拥有检测下载的功能。,配置较为简单,适合入门小白学习参考。 导航软件iApp源码V3+配置教程 配置教程在mian.iyu的载入事件里面

    基于CNN模型实现土壤湿度检测-数据集和完整代码.rar

    该数据集和完整代码主要实现《基于CNN模型实现土壤湿度检测》,适用于正在学习深度学习、神经网络以及计算机、农业自动化等相关专业的伙伴们。在现代农业和环境监测中,研究土壤湿度数据来预测未来的湿度趋势十分重要。资源中的CNN模型可能仍不够完善,大家可以继续修改完善,不断研究其他的内容。感谢大家的支持和交流,你们的支持也是我前进的十足动力!

    重庆大学数字电子技术试卷2007-2008(1)答案.pdf

    重庆大学期末考试试卷,重大期末考试试题,试题及答案

    mlab-upenn 研究小组的心脏模型模拟.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    【基于Springboot+Vue的Java毕业设计】银行账目账户管理系统项目实战(源码+录像演示+说明).rar

    【基于Springboot+Vue的Java毕业设计】银行账目账户管理系统项目实战(源码+录像演示+说明).rar 【项目技术】 开发语言:Java 框架:Spingboot+vue 架构:B/S 数据库:mysql 【演示视频-编号:305】 https://pan.quark.cn/s/8dea014f4d36 【实现功能】 用户信息管理,存取业务管理,公告信息管理,挂失信息管理,账户信息管理等

    年公司财务会计岗位工作总结(一).docx

    工作总结,新年计划,岗位总结,工作汇报,个人总结,述职报告,范文下载,新年总结,新建计划。

    智能机械装备制造信息化整体解决方案.pptx

    智能机械装备制造信息化整体解决方案.pptx

    杭州电子科技大学学生复习卷及部分答案.pdf

    杭州电子科技大学,期末考试资料,计算机专业期末考试试卷,试卷及答案,数据结构。

    Unity Asset Quantum Console v2.6.3

    Unity在打包后仍能看到控制台输出,甚至通过命令调用绑定好的函数,调试游戏的强大助手!

Global site tag (gtag.js) - Google Analytics