方案一:用递归遍历整个硬盘文件,并添加子节点
可行度:底 原因:因为要遍历整个硬盘,速度很慢
方案二:在节点展开时动态添加子节点
可行度:高 原因:弥补了方案一的缺陷
方案一的关键代码:
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
分享到:
相关推荐
JTree2.0 目录树 js目录树JTree2.0 目录树 js目录树JTree2.0 目录树 js目录树
jtree目录树,学习目录树的同学可以参考参考,js实现的,可以动态的无限添加目录树节点,非常方便
JTree2.0 目录树 树形菜单 菜单导航 经各浏览器测试。javascript脚本实现。
JTree2.0 目录树demo源码,要放到服务器上才能运行 运行效果 https://blog.csdn.net/chendongpu/article/details/124883701
用XML来配置的多级目录树菜单插件JTree
jwuery树jtree,此代码可以帮助学习java的同学更好的学习
jtree和QQ项目\树实现好友列表,并模拟来信图片变换
JTree 树形菜单插件包下载,在网页上快速实现树控菜单的一个小插件,功能相对完善,本次更新功能:加入treeNodes(数组形式),通过treeNodes可以对指定的子树进行收缩和展开功能,查找指定节点的功能。加入这个功能...
jtree和QQ项目\树上实现了弹出聊天窗口(传递了当前点击的树节点的图片和文字)
jstree-实用的jQuery目录树插件
包含JTree 的实用说明
使用JTree实现的文件资源管理器(仿照Windows操作系统)
jtree树案例,jtree中树的比较经典案例,很好。
jenkov-prizetags-3.4.0.jar,用于制作可以控制的树型菜单等功能,很好用,欢迎大家下载
JTree的例子,可以拖动节点 JTree的例子,可以拖动节点
JTree的使用 JTree的使用 JTree的使用
Swing展示的文件系统树,比较好地说明了JTree
加入treeNodes(数组形式),通过treeNodes可以对指定的子树进行收缩和展开功能,查找指定节点的功能。