仿资源管理器的java课程设计

上传人:沈*** 文档编号:107897837 上传时间:2022-06-15 格式:DOC 页数:29 大小:201KB
返回 下载 相关 举报
仿资源管理器的java课程设计_第1页
第1页 / 共29页
仿资源管理器的java课程设计_第2页
第2页 / 共29页
仿资源管理器的java课程设计_第3页
第3页 / 共29页
点击查看更多>>
资源描述
目录1. 概述.1 1.1资源管理器的简介.1 1.2课程设计的目的.1 1.3课程设计的内容.12系统需求分析.1 2.1 系统目标.2 2.2 主体功能.2 2.3 开发环境.23. 系统概要设计.3 3.1 系统功能模块划分.3 3.2系统流程图.34. 系统详细设计.45. 测试.10 5.1 测试结果.106. 参考文献.137.附录源程序清单.131 概述: 1.1 资源管理器的简介: 资源管理器是Windows提供的资源管理工具,我们可以用 它查看电脑的所有资源,特别是它提供的树形的文件系统结构,使我们能更直观地认识电脑的文件和文件夹。在实际的使用功能上“资源管理器”和”我的电脑”没什么不一样,两者都是用来管理系统资源的,也可以说是用来管理文件的。另外在资源管理器中还可以实现对文件的操作,如:文件的删除、文件的重命名、文件的新建、文件的复制、查看文件的属性等。 1.2 课程设计的目的: 通过本次的课程设计,使我们能够更加熟练的运用java的相关知识,能够使用GUI图形用户界面把我们编程的思想用图形的形式展现出来,同时开拓我们的眼界,拓宽我们的思维,让思想碰撞出火花,使不可能变成可能。 1.3 课程设计的内容: 实现一个类似于资源管理器的仿资源管理器,要求能以树形的形式将目录及文件展现出来,能弹出右键菜单,且要求能实现文件的删除、文件的重命名、及查看文件的属性等功能。2 系统需求分析: 2.1 系统目标: 可以正常运行程序,并按照设计目的的预想完成程序的功能。 2.2 主体功能: (1) 设计GUI的界面,整个界面只有一个树形的文件及目录树,出现在界面的左边。用鼠标选中该树的某一个节点,左击可以是节点进行收缩和展开,左击两次还可以进行文件的重命名,如果左击多次,对于可运行文件可以运行该文件。右击可以弹出菜单; (2) 文件夹及文件的删除:对于文件通过文件的删除方法进行删除,对于文件夹通过先删除文件夹里面的所有文件再删除文件夹,这里使用了递归删除的方法; (3) 文件的重命名:文件的重命名主要是用到了克隆的方法,即先生成一个克隆节点,使其于要删除的节点具有相同的引用,更新克隆节点的文件名,在删掉选中节点,再生成克隆的文件节点,在将其插入; (4) 文件的属性:通过文件类提供的各种方法获取文件的属性,将其在属性框中展现出来,包括是否可读,是否可写,修改时间是否隐藏等; (5)文件夹及文件的复制:主要是通过IO流来实现的,而对于文件夹则是通过递归的复制文件夹里面的所有文件在复制文件夹的; (6)文件的新建:主要是获取文件的路径,在以此进行文件的新建,在将其添加到树上; 2.3开发环境: Eclipse 运行平台进行开发的;3 系统概要设计: 3.1 系统的功能模块划分: (1)NodeDate.java类:主要用于创建文件节点类,包括两个成员变量,一个是文件对象,一个是文件的名称; (2) FolderRendere.java类:主要是用于绘制节点的,即用于绘制节点的图标等; (3) MyTree.java类:主要是窗口的设置,还有鼠标侦听器、树模型侦听器、菜单中的文件复制、文件删除、文件重命名、文件新建、文件属性的动作侦听器的各种实现方法; 仿资源管理器界面 3.2 系统流程图; 左键点击窗口任一项目 右键点击窗口任一项目子项目展开或合并弹出功能菜单删除重命名属性复制新建4. 系统详细设计: (1) 树模型侦听器: model.addTreeModelListener(new TreeModelListener()public void treeNodesChanged(TreeModelEvent e)/当树的节点改变时就调用这个方法 /获得编辑后的节点的父节点DefaultMutableTreeNode parent = (DefaultMutableTreeNode)(e.getTreePath().getLastPathComponent();/返回从根节点到该节点的路径,在找到树种最后一个选中的节点DefaultMutableTreeNode node;try int index = e.getChildIndices();/返回目前修改節點的索引值node = (DefaultMutableTreeNode)(parent.getChildAt(index0);/getChildAt()方法取得修改的節點對象./System.out.println(aClone.toString();/克隆体更新名称,file不变(NodeData)aClone.getUserObject().ChangeString(node.toString();/删除选定节点且要求该节点存在父节点model.removeNodeFromParent(node);/添加克隆体model.insertNodeInto(aClone,parent,index0);/在父节点的子节点中的 index 处插入aClone catch (NullPointerException exc) /點選的節點為root node,則getChildIndices()的返回值為null,root node產生的NullPointerException問題.System.out.println(model error);/系统实现改名NodeData data = (NodeData) aClone.getUserObject();String tt = data.f.getParent() + /;tt = tt + aClone.toString();File newfile = new File(tt);data.f.renameTo(newfile);/将文件改名为 指定的名字 data.f = newfile;return;public void treeStructureChanged(TreeModelEvent e) /当树的结构改变时就调用这个方法 public void treeNodesRemoved(TreeModelEvent e) / 当属的节点删除时就调用这个方法 public void treeNodesInserted(TreeModelEvent e) /当树的节点添加时就调用这个方法 );(2)属性侦听器: natrueItem.addActionListener(new ActionListener()/属性功能 /属性功能 public void actionPerformed(ActionEvent event) JDialog subDialog; subDialog=new JDialog(jf,属性); subDialog.setVisible(true); subDialog.setSize(400,400); JTextArea text=new JTextArea(); subDialog.getContentPane().add(text); TreePath tp=tree.getSelectionPath();/得到树状视图的被选择节点路径 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; int n=fullPath.indexOf(脑); String sp=fullPath.substring(n+2); File currentFile=new File(sp); StringBuffer sb=new StringBuffer(); if(currentFile.isDirectory() sb.append(文件夹路径:+currentFile.getAbsolutePath()+n); else sb.append(文件路径:+currentFile.getAbsolutePath()+n); sb.append(是否可读+currentFile.canRead()+n); sb.append(是否可写+currentFile.canWrite()+n); if(!currentFile.isDirectory() sb.append(文件的长度:+currentFile.length()/(1024*1024)+Mn);SimpleDateFormat s=new SimpleDateFormat(yyyy年MM年dd日HH 小时mm分钟ss秒); sb.append(文件上次修改的时间:+s.format(new Date(currentFile.lastModified()+n); sb.append(文件是否被隐藏:+currentFile.isHidden()+n); text.setText(sb.toString(); );(3) 删除侦听器: deleteItem.addActionListener(new ActionListener()public void actionPerformed(ActionEvent event) DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();if(selectedNode = null)return;/获得节点数据NodeData data = (NodeData) selectedNode.getUserObject();/显示是否删除的确认对话 int n = JOptionPane.showConfirmDialog(tree,确认删除吗?,确认对话框,JOptionPane.YES_NO_OPTION);if(n = JOptionPane.NO_OPTION)return;/如果该节点是文件if(selectedNode = root)JOptionPane.showMessageDialog(tree,本地磁盘不能被删除,警告对话框,JOptionPane.WARNING_MESSAGE);return;else if(data.f.isFile()/删除文件delFile(data.f.getAbsolutePath();else if(data.f.isDirectory()/删除文件夹if(selectedNode.getParent() != root)delFolder(data.f.getAbsolutePath();else JOptionPane.showMessageDialog(tree,本地磁盘不能被删除,警告对话框,JOptionPane.WARNING_MESSAGE);return;/处理树节点的删除model.removeNodeFromParent(selectedNode);); (4)复制侦听器: copyItem.addActionListener(new ActionListener() public void actionPerformed(ActionEvent event) /获取选中节点DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();if(selectedNode = null)return;/获得节点数据NodeData data = (NodeData) selectedNode.getUserObject();if(selectedNode = root) return; else if(data.f.isFile() copyfile(date.f.getAbsolutePath(),C:新建文件夹; else if(data.f.isDirectory() /删除文件夹 if(selectedNode.getParent() != root) copyDict(date.f.getAbsolutePath(),C:); else return; (5)重命名侦听器: renameItem.addActionListener(new ActionListener()public void actionPerformed(ActionEvent event)/设置可编辑tree.setEditable(true);/获取选中节点DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();TreePath editPath = tree.getSelectionPath();/得到被选择节点的路径if(selectedNode = null)return;/开始编辑tree.startEditingAtPath(editPath);/选择路径中的最后一个项并试着编辑它/,修改节点监控器,保存节点新名字aClone = (DefaultMutableTreeNode) selectedNode.clone();/测试-正确克隆/System.out.println(aClone.toString();); (6)新建侦听器: newFileItem.addActionListener(new ActionListener() /新建功能 public void actionPerformed(ActionEvent event) TreePath path=tree.getSelectionPath(); MutableTreeNode node=(MutableTreeNode) path.getLastPathComponent(); DefaultTreeModel model=( DefaultTreeModel) tree.getModel(); MutableTreeNode newNode=new DefaultMutableTreeNode(ghg); tree.fireTreeExpanded(path); if(node.getAllowsChildren() model.insertNodeInto(newNode,node,0); else return; String fullPath=; for(Object obj:path.getPath() String str=obj.toString(); if(str.endsWith()/处理盘符根目录问题 str=str.substring(0,str.length()-1); if(fullPath.equals() fullPath+=str; else fullPath+=+str; int n=fullPath.indexOf(脑); String op=fullPath.substring(n+2); / File currentFile=new File(op); File parentDir=new File(op); if(parentDir.isDirectory() File currentFile1=new File(op+ghg); currentFile1.mkdir(); ); 5 测试: 5.1 测试结果: 6. 参考文献: 1. Java开发技术大全,清华大学出版社,刘新著; 2.Java大学实用教程(第三版) 电子工业出版社,耿祥义、张跃平、 编著;7. 附录源程序清单: package 仿资源管理器;import javax.swing.*;import javax.swing.tree.*;import java.awt.event.*;import java.awt.*;import javax.swing.event.*;import java.io.*;import java.io.File.*;import javax.swing.JOptionPane;import javax.swing.filechooser.FileSystemView;import java.sql.Date;import java.text.SimpleDateFormat;SuppressWarnings(unused)public class MyTree JFrame jf;JTree tree;DefaultTreeModel model;/声明树状视图模型PopupMenu pop = new PopupMenu();/右键菜单MenuItem deleteItem = new MenuItem(删除);MenuItem renameItem = new MenuItem(重命名); MenuItem natrueItem = new MenuItem(属性); MenuItem newFileItem=new MenuItem(新建); MenuItem copyItem=new MenuItem(复制);DefaultMutableTreeNode root = new DefaultMutableTreeNode(new NodeData(null,我的电脑); /用于重命名时生成一个原节点的克隆体DefaultMutableTreeNode aClone;public void init()jf = new JFrame(仿资源管理器);File roots = File.listRoots();/获得系统根目录文件for(int i = 0;i roots.length;i +)DefaultMutableTreeNode node = new DefaultMutableTreeNode(new NodeData(rootsi,rootsi.getAbsolutePath();root.add(node);tree = new JTree(root);model = (DefaultTreeModel) tree.getModel();/获取Jtree对应的TreeModel的对象,即获取树的数据模型 tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);/一次只能选中一个节点先返回树的选择模型在设置树的选择模型tree.setCellRenderer(new FolderRenderer();/设置使用定制的节点绘制器/e.path() 返回已更改节点的父节点的路径。/e.childIndices() 返回更改节点的索引。/当用户完成一个节点的编辑时,这个 model 产生一个 tree model 事件,它会告诉所有监听者(包括 Jtree ):树节点被改变了。注意:尽管 DefaultMutableTreeNode 拥有改变一个节点内容的方法,但是改变还是需要通过 DefaultTreeModel 上面的方法。否则, tree model 事件就不能产生,事件的监听者(例如 tree )就不能知道这些更新。 /为了通知“节点改变”,我们可以实现一个 TreeModelListener 。这里有一个关于 tree model 监听器的例子,当用户为一个树节点输入一个新名字时,事件会被检测到。 model.addTreeModelListener(new TreeModelListener()public void treeNodesChanged(TreeModelEvent e)/当树的节点改变时就调用这个方法 /获得编辑后的节点的父节点DefaultMutableTreeNode parent = (DefaultMutableTreeNode)(e.getTreePath().getLastPathComponent();/返回从根节点到该节点的路径,在找到树种最后一个选中的节点DefaultMutableTreeNode node;try int index = e.getChildIndices();/返回目前修改節點的索引值node = (DefaultMutableTreeNode)(parent.getChildAt(index0);/getChildAt()方法取得修改的節點對象./System.out.println(aClone.toString();/克隆体更新名称,file不变(NodeData)aClone.getUserObject().ChangeString(node.toString();/删除选定节点且要求该节点存在父节点model.removeNodeFromParent(node);/添加克隆体model.insertNodeInto(aClone,parent,index0);/在父节点的子节点中的 index 处插入aClone catch (NullPointerException exc) /點選的節點為root node,則getChildIndices()的返回值為null,root node產生的NullPointerException問題.System.out.println(model error);/系统实现改名NodeData data = (NodeData) aClone.getUserObject();String tt = data.f.getParent() + /;tt = tt + aClone.toString();File newfile = new File(tt);data.f.renameTo(newfile);/将文件改名为 指定的名字 data.f = newfile;return;public void treeStructureChanged(TreeModelEvent e) /当树的结构改变时就调用这个方法 public void treeNodesRemoved(TreeModelEvent e) / 当属的节点删除时就调用这个方法 public void treeNodesInserted(TreeModelEvent e) /当树的节点添加时就调用这个方法 );/为pop添加菜单项pop.add(deleteItem);pop.addSeparator();pop.add(renameItem);pop.addSeparator();pop.add(natrueItem);pop.addSeparator(); pop.add(newFileItem); pop.addSeparator(); pop.add(copyItem); newFileItem.addActionListener(new ActionListener() /新建功能 public void actionPerformed(ActionEvent event) TreePath path=tree.getSelectionPath(); MutableTreeNode node=(MutableTreeNode) path.getLastPathComponent(); DefaultTreeModel model=( DefaultTreeModel) tree.getModel(); MutableTreeNode newNode=new DefaultMutableTreeNode(ghg); tree.fireTreeExpanded(path); if(node.getAllowsChildren() model.insertNodeInto(newNode,node,0); else return; String fullPath=; for(Object obj:path.getPath() String str=obj.toString(); if(str.endsWith()/处理盘符根目录问题 str=str.substring(0,str.length()-1); if(fullPath.equals() fullPath+=str; else fullPath+=+str; int n=fullPath.indexOf(脑); String op=fullPath.substring(n+2); / File currentFile=new File(op); File parentDir=new File(op); if(parentDir.isDirectory() File currentFile1=new File(op+ghg); currentFile1.mkdir(); ); natrueItem.addActionListener(new ActionListener()/属性功能 /属性功能 public void actionPerformed(ActionEvent event) JDialog subDialog; subDialog=new JDialog(jf,属性); subDialog.setVisible(true); subDialog.setSize(400,400); JTextArea text=new JTextArea(); subDialog.getContentPane().add(text); TreePath tp=tree.getSelectionPath();/得到树状视图的被选择节点路径 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; int n=fullPath.indexOf(脑); String sp=fullPath.substring(n+2); File currentFile=new File(sp); StringBuffer sb=new StringBuffer(); if(currentFile.isDirectory() sb.append(文件夹路径:+currentFile.getAbsolutePath()+n); else sb.append(文件路径:+currentFile.getAbsolutePath()+n); sb.append(是否可读+currentFile.canRead()+n); sb.append(是否可写+currentFile.canWrite()+n); if(!currentFile.isDirectory() sb.append(文件的长度:+currentFile.length()/(1024*1024)+Mn); SimpleDateFormat s=new SimpleDateFormat(yyyy年MM年dd日HH小时mm分钟ss秒); sb.append(文件上次修改的时间:+s.format(new Date(currentFile.lastModified()+n); sb.append(文件是否被隐藏:+currentFile.isHidden()+n); text.setText(sb.toString(); ); /菜单项deleteItem的动作侦听器deleteItem.addActionListener(new ActionListener()public void actionPerformed(ActionEvent event)/获取选中节点DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();if(selectedNode = null)return;/获得节点数据NodeData data = (NodeData) selectedNode.getUserObject();/显示是否删除的确认对话框int n = JOptionPane.showConfirmDialog(tree,确认删除吗?,确认对话框,JOptionPane.YES_NO_OPTION);if(n = JOptionPane.NO_OPTION)return;/如果该节点是文件if(selectedNode = root)JOptionPane.showMessageDialog(tree,本地磁盘不能被删除,警告对话框,JOptionPane.WARNING_MESSAGE);return;else if(data.f.isFile()
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!