运行了之后,只能显示默认目录下的文件夹,子文件夹无法实现折叠和展开,也就是说事件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 java.io.File;
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);
}
}