| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 422 人关注过本帖
标题:JTree实现文件管理器的bug,请高手帮助
只看楼主 加入收藏
w1520138768
Rank: 1
等 级:新手上路
帖 子:2
专家分:3
注 册:2012-9-13
收藏
 问题点数:0 回复次数:0 
JTree实现文件管理器的bug,请高手帮助
程序代码:
运行了之后,只能显示默认目录下的文件夹,子文件夹无法实现折叠和展开,也就是说事件TreeExpansionEvent事件无法触发[code=Java][package cn.buaa;
import javax.swing.*;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

import java.awt.*;
import public class DemoWindow extends JFrame implements TreeExpansionListener {
//显示目录的树状视图
JTree tree =null;
//树状视图的模型类
DefaultTreeModel dtm=null;
//构造函数
public DemoWindow(){
super();
//设置默认的查看目录
File f=new File("G:");
//建立树状视图的根节点
DefaultMutableTreeNode top = new DefaultMutableTreeNode(f.getPath());
//设置树状视图的初始状态到树状视图模型类
getRoot(top,f);
//建立树状视图模型类
dtm=new DefaultTreeModel(top);

dtm.setAsksAllowsChildren(true);
//建立树状视图
tree =new JTree(dtm);
//建立树状视图的滚动条
int v= ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
JScrollPane jsp = new JScrollPane(tree,v,h);
//添加树状视图
add(jsp,BorderLayout.CENTER);
//添加事件监听器
tree.addTreeExpansionListener(this);
}
//该函数设置树状视图的初始状态到树状视图模型类
public void getRoot(DefaultMutableTreeNode superDmtn,File f){
//遍历所有下级文件
File files[]=f.listFiles();

for(int i=0;i<files.length;i++){
//建立树状视图的子节点,名称为文件名
DefaultMutableTreeNode dmtn =new DefaultMutableTreeNode(files[i]);
//如果是目录,则对应的子节点允许存在子节点,显示加好标记
if(files[i].isDirectory())
dmtn.setAllowsChildren(true);
else
dmtn.setAllowsChildren(false);
superDmtn.add(dmtn);
}
}
//相应展开树状视图
public void treeExpanded(TreeExpansionEvent event) {
//得到展开的子节点
DefaultMutableTreeNode node = (DefaultMutableTreeNode)(event.getPath()).getLastPathComponent();
//判断是否已有子节点,如果没有,遍历文件信息将其添加到当前子节点下,生成下机子节点
if(node.getChildCount()==0){
//备份当前节点
DefaultMutableTreeNode originalNode=node;
//得到当前子节点名,即对应文件的名称
String fileName =node.toString();
//通过倒序上移节点,获取节点对应文件的完整路径
while(node.getParent()!=null){

node=(DefaultMutableTreeNode)node.getParent();
fileName=node.toString()+"\\"+fileName;
}
//继续处理当前子节点
if(originalNode !=null){
//生成当前对应文件的类变量
File f=new File(fileName);
//如果是目录,继续处理
if(f.isDirectory()){
File files[]=f.listFiles();
//如果目录不为空,则循环遍历每个下级文件
if(files!=null)
for(int i=0;i<files.length;i++){
DefaultMutableTreeNode dmtn=new DefaultMutableTreeNode(files[i].getName());
if(files[i].isDirectory())
dmtn.setAllowsChildren(true);
else
dmtn.setAllowsChildren(false);
dtm.insertNodeInto(dmtn, originalNode,originalNode.getChildCount());
}
dtm.reload();
}
}
}
}

//相应收缩树状视图
public void treeCollapsed(TreeExpansionEvent event) {
DefaultMutableTreeNode dmtn=new DefaultMutableTreeNode(event.getPath().getLastPathComponent());
for(int i=0;i<dmtn.getChildCount();i++)
dmtn.remove(i);
dtm.reload();

}
public static void main(String[] args){
DemoWindow frame =new DemoWindow();
frame.setSize(600,500);
frame.setLocation(200,200);
frame.setVisible(true);
}
}
搜索更多相关主题的帖子: 文件管理器 
2012-09-13 14:22
快速回复:JTree实现文件管理器的bug,请高手帮助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041008 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved