转】java 支持文件删除的树状视图文件资源管理器
来源:互联网 发布:巨灵媒体数据库 编辑:程序博客网 时间:2024/06/03 22:12
转】java 支持文件删除的树状视图文件资源管理器
效果图:
原文:http://www.xinbcw.com/viewthread.php?tid=2580
java代码:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
//测试类
public class Exec {
public static void main(String[] args) {
// 创建窗体类变量
DemoWindow dw = new DemoWindow("可以删除文件的树状视图文件资源管理器");
// 将窗体的宽度和高度分别设置为屏幕宽度和屏幕高度的1/2,左上角位置设置为屏幕宽度和屏幕高度的1/4处
Toolkit theKit = dw.getToolkit();
Dimension wndSize = theKit.getScreenSize();
dw.setBounds(wndSize.width / 4, wndSize.height / 4, wndSize.width / 2,
wndSize.height / 2);
// 点击关闭按钮可以退出程序
dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗体为可见
dw.setVisible(true);
}
}
// 界面窗体
class DemoWindow extends JFrame implements TreeExpansionListener {
// 显示目录的树状视图
JTree tree = null;
// 树状视图的模型类
DefaultTreeModel dtm = null;
// 构造函数
public DemoWindow(String title) {
super(title);
// 设置默认的查看目录
File f = new File("C:\\Program Files\\Java\\jdk1.6.0_10");
// 建立树状视图的根节点
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);
// 添加事件监听器,响应右击树状视图显示快捷菜单
tree.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
// 如果为右击
if (e.getButton() == MouseEvent.BUTTON3) {
// 利用点击位置获取所选择的子节点
int selRow = tree.getRowForLocation(e.getX(), e.getY());
// 设置树状视图的选中状态
tree.setSelectionRow(selRow);
// 如果为有效子节点
if (selRow != -1) {
// 如果为右单击
if (e.getClickCount() == 1) {
// 显示快捷菜单
JPopupMenu pop = new JPopupMenu();
JMenuItem item1 = new JMenuItem("删除");
// 该快捷菜单响应删除文件的操作
item1.addActionListener(new MenuAction());
pop.add(item1);
pop.show(tree, e.getX(), e.getY());
}
}
}
}
});
}
// 内部类,响应快捷菜单的单击操作
private class MenuAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
// 得到树状视图的被选择节点路径
TreePath tp = tree.getSelectionPath();
// 得到树状视图的被选择节点
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tp
.getLastPathComponent();
// 从树状视图删除当前节点
DefaultTreeModel dtm = (DefaultTreeModel) tree.getModel();
dtm.removeNodeFromParent(node);
// 得到被选择节点对应文件的完整路径信息
String fullPath = "";
for (Object obj : tp.getPath()) {
String str = obj.toString();
// 处理盘符根目录问题
if (str.endsWith("\\"))
str = str.substring(0, str.length() - 1);
if (fullPath.equals(""))
fullPath += str;
else
fullPath += "\\" + str;
}
// 如果是文件,直接删除,如果是目录则调用deleteDir函数删除目录
File currentFile = new File(fullPath);
if (currentFile.isFile())
currentFile.delete();
else
deleteDir(currentFile);
}
};
// 通过递归调用,可以删除目录的函数
public static boolean deleteDir(File dir) {
// 判断是否为目录,如果是,则递归调用自己,如果不是,直接删除文件
if (dir.isDirectory()) {
String[] subDir = dir.list();
for (String s : subDir) {
deleteDir(new File(dir, s));
}
}
return dir.delete();
}
// 该函数设置树状视图的初始状态到树状视图模型类
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]
.getName());
// 如果是目录,则对应的子节点允许存在子节点,显示加号标记,否则不显示
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());
}
}
}
}
}
// 响应收缩树状视图
public void treeCollapsed(TreeExpansionEvent event) {
}
}
- 转】java 支持文件删除的树状视图文件资源管理器
- 手动删除资源管理器不能删除的文件或者目录
- Java-ftp支持中文目录、文件名的 上传、删除文件
- 监视资源管理器的文件变化
- 监视资源管理器的文件变化
- vc 支持通配符的文件删除
- ( 转载)纯Java文件操作工具,支持文件、文件夹的复制、删除、移动
- 纯Java文件操作工具,支持文件、文件夹的复制、删除、移动
- 纯Java文件操作工具,支持文件、文件夹的复制、删除、移动
- 监视资源管理器的文件复制/删除/移动操作,不要太过寄望于Hook SHFileOperation
- 设置文件资源管理器→我的电脑
- java 删除文件 创建文件的类
- java 操作文件之文件的删除
- XYplorer文件资源管理器
- 文件资源管理器及二进制
- 文件、目录的删除Java
- Delphi 支持通配符删除文件!
- java-ftp 上传、删除文件(支持中文目录、文件名)
- 双系统如何正确的删除Ubuntu
- iPhone应用开发之一:窗口,视图,视图控制器和UIKit基础
- 困惑
- Linux下DISPLAY环境变量的作用
- 为Eclipse安装插件ADT plugin
- 转】java 支持文件删除的树状视图文件资源管理器
- Mono for android 添加手机权限
- PowerBuilder中DW交叉行颜色不一样
- 详解Android动画之Interpolator插入器
- 莫名其妙的 eclipse 提示 标记“<”上有语法错误
- MongoDB学习笔记(一) MongoDB介绍及安装
- 图形液晶240*128驱动(型号为SMG240128A)移植到jlx的128*64单色lcd架构
- android11_NotificationManager和Notification
- 一直说CSD,给大家介绍下到底CSD是什么哈