用FileSystemView fileSystemView = FileSystemView.getFileSystemView()初始化的树默认以desktop为根目录,但是如果不使用FileSystemView来初始化,自定义的FileNode将不能用实际文件来定义,即不能与文件联系起来,可以采用listFile(),和FileSystemView相结合的方法,同时在FiletTreeModel中 自定义FileNode的isLeaf()函数来实现
class FileTreeModel extends DefaultTreeModel { public FileTreeModel(TreeNode root) { super(root); FileSystemView fileSystemView = FileSystemView.getFileSystemView(); File[] files=fileSystemView.getRoots(); for (int i = 0; i < files.length; i++) { FileNode childFileNode = new FileNode(fileSystemView.getSystemDisplayName(files[i]), fileSystemView.getSystemIcon(files[i]), files[i], false); DefaultMutableTreeNode childTreeNode = new DefaultMutableTreeNode(childFileNode); ((DefaultMutableTreeNode)root).add(childTreeNode); } } @Override public boolean isLeaf(Object node) { DefaultMutableTreeNode treeNode=(DefaultMutableTreeNode)node; FileNode fileNode=(FileNode)treeNode.getUserObject(); if(fileNode.isDummyRoot)return false; return fileNode.file.isFile(); } }
初始化
DefaultMutableTreeNode lastTreeNode =(DefaultMutableTreeNode) event.getPath().getLastPathComponent(); FileNode fileNode = (FileNode) lastTreeNode.getUserObject(); File[] files; File f = new File("C:/Users/Dadaism/Desktop/123/"); if (!fileNode.isInit) { if (fileNode.isDummyRoot) { files = f.listFiles(); } else { FileSystemView fs = FileSystemView.getFileSystemView(); files = fs.getFiles( ((FileNode) lastTreeNode.getUserObject()).file, false); } for (int i = 0; i < files.length; i++) { FileNode childFileNode; DefaultMutableTreeNode childTreeNode; if(files[i].getName().endsWith(".txt")){ String filename = files[i].getName().replace(".txt", ""); childFileNode = new FileNode(filename,null,files[i], false); } else{ childFileNode = new FileNode(files[i].getName(),null,files[i],false); } childTreeNode = new DefaultMutableTreeNode(childFileNode); lastTreeNode.add(childTreeNode); } DefaultTreeModel treeModel1 = (DefaultTreeModel) getModel(); treeModel1.nodeStructureChanged(lastTreeNode); } fileNode.isInit = true;