文件管理器JAVA课程设计报告文档Word格式.docx
《文件管理器JAVA课程设计报告文档Word格式.docx》由会员分享,可在线阅读,更多相关《文件管理器JAVA课程设计报告文档Word格式.docx(25页珍藏版)》请在冰点文库上搜索。
(7)如何写expansionlinstener
(8)如何写tree-will-expandlistener
利用JTree类,你可以显示等级体系的数据Jtree垂直显示它的数据。
树中显示的每一行包含一项数据,称之为节点(node)。
每颗树有一个根节点(rootnode),其他所有节点是它的子孙。
默认情况下,树只显示根节点,但是你可以设置改变默认显示方式。
一个节点可以拥有孩子也可以不拥有任何子孙。
我们称那些可以拥有孩子(不管当前是否有孩子)的节点为“分支节点”
(branchnodes),而不能拥有孩子的节点为“叶子节点”(leafnodes
)。
分支节点可以有任意多个孩子。
通常,用户可以通过点击实现展开或者折叠分支节点,使得他们的孩子可见或者不可见。
默认情况下,除了根节点以外的所有分支节点默认呈现折叠状态。
程序中,通过监听treeexpansion或者tree-will-expand事件可以检测分支节点的展开状态。
三、程序框图或流程图,程序清单与调用关系
开始
初始化窗口各个控件
添加控件事件监听
构造系统目录树模块
判断系统是否有WINRAR
把rar.exe拷贝到系统目录下并配置环境
①窗体初始模块加载 NO
系统关联打开文件
应用当前配置环境
对窗口控件进行布局
②压缩模块加载
显示窗口
关于对话框
构造及其刷新文件树
添加目录根节点
遍历添加盘符节点
添加节点选择事件监听
③事件监听关闭窗体
结束
获取文件对象
读取文件属性及其摘要,显示在右区域
多线程遍历子节点
把子节点添加到树中
添加节点展开事件监听
设置目录树的显示样式
树节点选择事件捕获
普通控件事件捕获,例如:
单击按钮启用不同功
④压缩文件
树节点展开事件捕获
刷新文件树
调用WINRAR环境中的
rar.exe进行压缩
获取目标文件位置
获取文件位置
①位于FileViewe类中的构造函数中(FileViewer.java)
②位于FileViewer类中Main方法中(FileViewer.java)
③其中普通事件监听方法位于FileViewe类中,树的两个特殊事件监控类位的于
DirExpansionListener和DirSelectionListener两个内部类中(FileViewer.java)
④位于Compress类中(Compress.java)
注:
其中FileNode类(FileNode.java)为文件节点类,故不在流程范围内
FileViwer流程图
version1.0
一、全部源程序清单
packagejluzh.fileViewer;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjava.text.DateFormat;
importjavax.swing.*;
importjavax.swing.tree.*;
importjavax.swing.event.*;
publicclassFileViewerextendsJFrame implementsActionListener
{
/**
*FileView程序的主窗口
*/
privatestaticfinallongserialVersionUID=1L;
//Eclipse自动生成的序列化版本id号
privateJTree m_tree;
//文件夹树privateDefaultTreeModelm_model;
//默认树显示模式
privateJTextAream_rightTextArea;
//右边的文本显示区域privateJTextFieldm_PathDisplay;
//底部的路径显示区域
privateJButtonm_openBtn;
//打开文件按钮privateJButtonm_compressBtn;
//压缩文件按钮privateJButtonm_refreshBtn;
//刷新按钮privateJButtonm_aboutBtn;
privateStringm_szFileExcutePath;
//文件打开绝对路径
publicFileViewer()
束程序
super("
FileViewer"
);
//设置窗口标题
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//在关闭窗口时候结
//
//***************************************************************************
*********
//初始化成员变量
/*其中m_tree的初始化在《构造系统目录树》中*/
/*其中m_model的初始化在《构造系统目录树》中*/
m_rightTextArea=newJTextArea();
m_rightTextArea.setEditable(false);
//右面文本显示区域不可写
m_PathDisplay=newJTextField();
m_PathDisplay.setEditable(false);
//下面路径显示区域不可写
//初始化按钮并添加事件响应
m_openBtn=newJButton("
打开文件 利用系统关联打开文件"
m_openBtn.addActionListener(this);
m_compressBtn=newJButton("
压缩 配置winrar成功时可用"
m_compressBtn.addActionListener(this);
m_refreshBtn=newJButton("
刷新"
m_refreshBtn.addActionListener(this);
m_aboutBtn=newJButton("
关于FileViewer"
m_aboutBtn.addActionListener(this);
m_szFileExcutePath=null;
//初始化文件打开路径
// 构造系统目录树 利用树自带的TreeExpansionListener对树进行
Expansion和Selection响应处理
DefaultMutableTreeNodetop;
//树形目录的根节点DefaultMutableTreeNodenode;
//系统的盘符的节点
File[]roots=File.listRoots();
//列出可用的文件系统盘符数组
"
//构造根节点,后面加空格为了增大左面板初始面积
top = new DefaultMutableTreeNode("
我的电脑
//遍历所有盘符,增加到top的孩子节点里
for(intk=0;
k<
roots.length;
k++)
node=newDefaultMutableTreeNode(newFileNode(roots[k]));
top.add(node);
node.add(newDefaultMutableTreeNode(newBoolean(true)));
//在构造的孩子节点下构造初始子节点,节点为true,使成为能扩展状态
}
m_model=newDefaultTreeModel(top);
//设置默认模式根节点为topm_tree=newJTree(m_model);
//按m_model模
式构造文件树
m_tree.putClientProperty("
JTree.lineStyle"
"
Angled"
//设置客户区样
式
m_tree.addTreeExpansionListener(newDirExpansionListener());
//设置树展开事件响应处理
m_tree.addTreeSelectionListener(newDirSelectionListener());
//设置树选择事件响应处理
为单选编辑
m_tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
//设置选择模式m_tree.setEditable(false);
//设置树为不可
//对窗口的界面进行处理
JPanelleftPanel=newJPanel();
//左边区域的pane的设置leftPanel.setLayout(newBorderLayout());
JScrollPanescroll_tree=newJScrollPane(m_tree);
//给树形区
域添加滚动条
leftPanel.add(scroll_tree,BorderLayout.CENTER);
//加入文件树到左区域
leftPanel.add(m_refreshBtn,BorderLayout.SOUTH);
//添加刷新
按钮
leftPanel.add(m_aboutBtn,BorderLayout.NORTH);
//添加关于
JPanelringhtPanel=newJPanel();
//右边区域的pane的设置ringhtPanel.setBackground(Color.WHITE);
ringhtPanel.setLayout(newBorderLayout());
JScrollPanescroll_text=newJScrollPane(m_rightTextArea);
//给本文区
ringhtPanel.add(scroll_text,BorderLayout.CENTER);
//加入文本显示到右区域
ringhtPanel.add(m_openBtn,BorderLayout.NORTH);
//加入打开按钮ringhtPanel.add(m_compressBtn,BorderLayout.SOUTH);
//加入压缩按钮
JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,leftPanel,ringhtPanel);
//垂直分割左右pane
getContentPane().add(split,BorderLayout.CENTER);
//分割pane置中
getContentPane().add(m_PathDisplay,BorderLayout.SOUTH);
//路径显示置于底部
setSize(800,600);
//设置窗口大小
setLocation(200,100);
//设置位置setVisible(true);
//显示窗口
@Override
///////////////////////////////////
//通用事件处理
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstubif(e.getSource()==this.m_openBtn)//打开文件
if(this.m_szFileExcutePath==null)
JOptionPane.showMessageDialog(null,
盘符、文件夹等没有系统文件后缀关联,所以无法打开"
警告"
JOptionPane.WARNING_MESSAGE);
return;
try{
Runtime.getRuntime().exec("
cmd /c start"
+this.m_szFileExcutePath);
}catch(IOExceptione1){
//TODOAuto-generatedcatchblocke1.printStackTrace();
if(e.getSource()==this.m_compressBtn)//压缩文件
if(m_szFileExcutePath==null)
盘符、文件夹等没有系统文件后缀,不支持压缩操作"
else
newCompress(m_szFileExcutePath);
if(e.getSource()==this.m_refreshBtn)//刷新文件夹树
//遍历所有盘符,增加到top的孩子节点里for(intk=0;
//在构造的孩子节点下构造初始子节点,节点为true,使成为能扩展状
态
//重新构造树形模式m_tree.setModel(m_model);
m_szFileExcutePath=null;
//清空当前路径m_PathDisplay.setText(null);
//清空路径显示框m_rightTextArea.setText(null);
//清空右方文本区域
if(e.getSource()==this.m_aboutBtn)//关于窗口
作者:
"
JOptionPane.DEFAULT_OPTION);
/**********************************************************
*用于响应树节点展开事件
*内部事件响应类
classDirExpansionListenerimplementsTreeExpansionListener
//树展开事件
publicvoidtreeExpanded(TreeExpansionEventevent)
//TODOAuto-generatedmethodstub
finalDefaultMutableTreeNodenode=getTreeNode(event.getPath());
//要展开的树节点
finalFileNodefnode=getFileNode(node);
//转换为要展开的文件节点
//多线程BFS遍历生成所有子节点Threadrunner=newThread()
publicvoidrun()
if(fnode!
=null&
&
fnode.expand(node))//如果节点不为空,还有可扩展节点(子节点)
Runnablerunnable=newRunnable()
m_model.reload(node);
//在模式里刷新本子
树
};
到线程队列
SwingUtilities.invokeLater(runnable);
//把runnable加入
runner.start();
//树折叠事件(不处理)
publicvoidtreeCollapsed(TreeExpansionEventevent)
*用于响应树节点选中事件
classDirSelectionListenerimplementsTreeSelectionListener
publicvoidvalueChanged(TreeSelectionEventevent)
的树节点
DefaultMutableTreeNodenode=getTreeNode(event.getPath());
//选中
FileNodefnode=getFileNode(node);
//转换
为选中的文件节点
=null) //判断选中的是否为有效文件节点
m_PathDisplay.setText(fnode.getFile().getAbsolutePath());
//在底部显示绝对路径
Filef=fnode.getFile();
longlen=f.length();
Stringf_Attribute="
属性:
\n"
;
//文件的属性字符串
+"
if(f.isFile())f_Attribute+="
文件名称:
+f.getName()
elsef_Attribute+="
文件夹名:
+f.getName()+"
f_Attribute+="
文件路径:
+f.getPath()+"
if(f.isFile())
f_Attribute+="
文件长度:
+len+"
字节\n"
式对象
DateFormatdf=DateFormat.getDateInstance();
//创建时间格
f_Attribute += "
修改时间:
+
df.format(f.lastModified())+"
读"
if(f.canRead())f_Attribute+="
当前权限:
+"
可
不可读"
if(f.canWrite())f_Attribute+="
可写"
不可写"
FileReaderfr=null;
fr=newFileReader(f.getPath());
}catch(FileNotFoundExceptione){
//TODOAuto-generated