方案一:用递归遍历整个硬盘文件,并添加子节点
可行度:底 原因:因为要遍历整个硬盘,速度很慢
方案二:在节点展开时动态添加子节点
可行度:高 原因:弥补了方案一的缺陷
方案一的关键代码:
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
分享到:
相关推荐
源码实现了图片上传功能,可供相关功能开发的小伙伴参考学习使用。
工作总结,新年计划,岗位总结,工作汇报,个人总结,述职报告,范文下载,新年总结,新建计划。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
IMG_20240426_195457.jpg
Excel数据看板,Excel办公模板,Excel模板下载,Excel数据统计,数据展示
A Confidence-Guided Automated System for Non-emergency Calls.pdf
1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
杭州电子科技大学,期末考试资料,计算机专业期末考试试卷,试卷及答案,数据结构。
对保险业中人工智能的监管: 平衡消费者保护与创新.pdf
重庆大学期末考试试卷,重大期末考试试题,试题及答案
震惊,师专男大竟然在夜深人静的夜晚写下了这些普通人都看不懂的东西,内容是...
一款支持侧边导航栏的网页导航APP源码,风格简约为主,可以通过远程文档进行远程控制列表,浏览器拥有检测下载的功能。,配置较为简单,适合入门小白学习参考。 导航软件iApp源码V3+配置教程 配置教程在mian.iyu的载入事件里面
该数据集和完整代码主要实现《基于CNN模型实现土壤湿度检测》,适用于正在学习深度学习、神经网络以及计算机、农业自动化等相关专业的伙伴们。在现代农业和环境监测中,研究土壤湿度数据来预测未来的湿度趋势十分重要。资源中的CNN模型可能仍不够完善,大家可以继续修改完善,不断研究其他的内容。感谢大家的支持和交流,你们的支持也是我前进的十足动力!
重庆大学期末考试试卷,重大期末考试试题,试题及答案
1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
【基于Springboot+Vue的Java毕业设计】银行账目账户管理系统项目实战(源码+录像演示+说明).rar 【项目技术】 开发语言:Java 框架:Spingboot+vue 架构:B/S 数据库:mysql 【演示视频-编号:305】 https://pan.quark.cn/s/8dea014f4d36 【实现功能】 用户信息管理,存取业务管理,公告信息管理,挂失信息管理,账户信息管理等
工作总结,新年计划,岗位总结,工作汇报,个人总结,述职报告,范文下载,新年总结,新建计划。
智能机械装备制造信息化整体解决方案.pptx
杭州电子科技大学,期末考试资料,计算机专业期末考试试卷,试卷及答案,数据结构。
Unity在打包后仍能看到控制台输出,甚至通过命令调用绑定好的函数,调试游戏的强大助手!