import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.io.File;
import java.util.Collections;
import java.util.Vector;import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeWillExpandListener;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;/**
 * 动态加载树型文件的 Jtree
 * 
 * @author support
 */
public class FileSystemTree extends JPanel { JTree ndsTree; DefaultMutableTreeNode rootNode; DefaultTreeModel tm; public FileSystemTree(File dir) throws Exception { setLayout(new BorderLayout()); rootNode = new DefaultMutableTreeNode(dir.getPath());
tm = new DefaultTreeModel(rootNode);
ndsTree = new JTree(tm); File[] disk = dir.listFiles();
for (int i = 0; i < disk.length; i++) {
DefaultMutableTreeNode d = new DefaultMutableTreeNode(disk[i]
.getAbsolutePath());
rootNode.add(d);
d.add(new DefaultMutableTreeNode(null));
} ndsTree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) e
.getPath().getLastPathComponent();
System.out.println("You selected " + node);
}
}); ndsTree.addTreeWillExpandListener(new TreeWillExpandListenerImp(this)); JScrollPane scrollpane = new JScrollPane();
scrollpane.getViewport().add(ndsTree);
add(BorderLayout.CENTER, scrollpane);
} void addNodes(DefaultMutableTreeNode curNode, File dir) {
String curPath = dir.getPath(); Vector ol = new Vector();
String[] tmp = dir.list();
for (int i = 0; i < tmp.length; i++)
ol.addElement(tmp[i]);
Collections.sort(ol, String.CASE_INSENSITIVE_ORDER);
File f;
Vector files = new Vector(); for (int i = 0; i < ol.size(); i++) {
String thisObject = (String) ol.elementAt(i);
String newPath;
newPath = curPath + File.separator + thisObject;
if ((f = new File(newPath)).isDirectory()) {
DefaultMutableTreeNode dt = new DefaultMutableTreeNode(
thisObject);
curNode.add(dt);
dt.add(new DefaultMutableTreeNode(null));
} else
curNode.add(new DefaultMutableTreeNode(thisObject)); }
tm.reload(curNode);
} public Dimension getMinimumSize() {
return new Dimension(200, 400);
} public Dimension getPreferredSize() {
return new Dimension(200, 400);
} public static void main(String[] av) throws Exception { JFrame frame = new JFrame("FileTree");
frame.setForeground(Color.black);
frame.setBackground(Color.lightGray);
Container cp = frame.getContentPane(); if (av.length == 0) {
cp.add(new FileSystemTree((File.listRoots())[0]));
} else {
cp.setLayout(new BoxLayout(cp, BoxLayout.X_AXIS));
for (int i = 0; i < av.length; i++)
cp.add(new FileSystemTree(new File(av[i])));
} frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} class TreeWillExpandListenerImp implements TreeWillExpandListener {
private FileSystemTree ft; public TreeWillExpandListenerImp(FileSystemTree ft) {
this.ft = ft;
} public FileSystemTree getAdapter() {
return this.ft;
} public void treeWillExpand(TreeExpansionEvent event) {
TreePath tp = event.getPath();
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tp
.getLastPathComponent();
node.removeAllChildren();
Object[] opath = tp.getPath();
String realpath = "";
if (opath.length == 1) {
realpath = opath[0].toString();
} else
for (int i = 0; i < opath.length; i++) {
String temp = realpath.equals("") ? "" : File.separator;
realpath = realpath + temp + opath[i].toString();
}
File f = new File(realpath);
getAdapter().addNodes(node, f);
} public void treeWillCollapse(TreeExpansionEvent event) {
}
}
}
参考了前辈一些代码,没有实现文件夹和文件的分类排序。