📄 filetree.java
字号:
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.io.*;
/*
构造函数要求提供被调用的JFrame参数
完成文件树型结构
*/
public class FileTree extends JTree {
public FileTree(MyFrame f) {
super((TreeModel)null);
putClientProperty("JTree.lineStyle", "Angled");
File[] drives=File.listRoots(); //获取驱动器文件
frame=f; //得到父Frame
DefaultMutableTreeNode rootNode=new DefaultMutableTreeNode("我的电脑");
for(int i=1;i<drives.length;i++) //将各驱动器添加入根节点
{
if(drives[i].isDirectory())
rootNode.add(new FileTreeNode(null,drives[i].getPath()));
}
setModel(new DefaultTreeModel(rootNode)); //将根节点添加入文件树中
addTreeExpansionListener(new TreeExpansionHandler()); //添加事件
addTreeSelectionListener(new TreeSelectionHandler());
}
//获取文件路径
public static String getPathName(TreePath path) {
Object o = path.getLastPathComponent();
if (o instanceof FileTreeNode) {
return ((FileTreeNode)o).file.getAbsolutePath();
}
return null;
}
//获取文件
public static File getFile(TreePath path) {
Object o = path.getLastPathComponent();
if (o instanceof FileTreeNode) {
return ((FileTreeNode)o).file;
}
return null;
}
//自定义节点类
protected static class FileTreeNode extends DefaultMutableTreeNode {
public FileTreeNode(File parent, String name)
{
this.name = name;
file = new File(parent, name);
isDir = file.isDirectory();
setUserObject(file);
}
public boolean isLeaf() {
return !isDir;
}
public boolean getAllowsChildren() {
return isDir;
}
public String toString() {
return name;
}
//展开节点
boolean populateDirectories(boolean descend) {
boolean addedNodes = false;
if (populated == false) {
if (interim == true) {
removeAllChildren();
interim = false;
}
String[] names = file.list();
for (int i = 0; i < names.length; i++) {
String name = names[i];
File d = new File(file, name);
try {
if (!d.isHidden()) {
if(d.isDirectory()){
FileTreeNode node = new FileTreeNode(file, name);
this.add(node);
if (descend) {
node.populateDirectories(true);
}
addedNodes = true;
if (descend == false) {
break;
}
}
}
} catch (Throwable t) {
}
}
if (descend == true || addedNodes == false) {
populated = true;
} else {
interim = true;
}
}
return addedNodes;
}
protected File file;
protected String name;
protected boolean populated;
protected boolean interim;
protected boolean isDir;
}
protected class TreeExpansionHandler implements TreeExpansionListener {
public void treeExpanded(TreeExpansionEvent evt) { //展开节点事件
TreePath path = evt.getPath();
JTree tree = (JTree)evt.getSource();
if(evt.getPath().toString().trim().compareTo("[我的电脑]")!=0)
{
FileTreeNode node = (FileTreeNode)path.getLastPathComponent();
if (node.populateDirectories(true))
((DefaultTreeModel)tree.getModel()).nodeStructureChanged(node);
}
}
public void treeCollapsed(TreeExpansionEvent evt) {
//
}
}
protected class TreeSelectionHandler implements TreeSelectionListener{
public void valueChanged(TreeSelectionEvent evt){ //选择节点事件
if(evt.getPath().toString().trim().compareTo("[我的电脑]")!=0)
frame.FileChanged(FileTree.getFile(evt.getPath()));
}
}
protected MyFrame frame;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -