时间:2021-05-20
本文实例讲述了Java实现的Windows资源管理器。分享给大家供大家参考。具体如下:
FileTree.java文件如下:
// FileTree.java/*********************************************************** * Author: Jason * email: tl21cen@hotmail.com * CSDN blog: http://blog.csdn.net/UnAgain/ ***********************************************************/package tl.exercise.swing;import java.awt.Component;import java.io.File;import java.util.Vector;import javax.swing.Icon;import javax.swing.JTree;import javax.swing.event.TreeExpansionEvent;import javax.swing.event.TreeExpansionListener;import javax.swing.event.TreeModelListener;import javax.swing.event.TreeSelectionEvent;import javax.swing.event.TreeSelectionListener;import javax.swing.filechooser.FileSystemView;import javax.swing.tree.DefaultTreeCellRenderer;import javax.swing.tree.TreeModel;import javax.swing.tree.TreePath;public class FileTree extends JTree { static final long serialVersionUID = 0; private FileList theList; public FileTree(FileList list) { theList = list; setModel(new FileSystemModel(new FolderNode())); this.setCellRenderer(new FolderRenderer()); addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent tse) { } }); this.setSelectionRow(0); } public void fireValueChanged(TreeSelectionEvent tse) { TreePath tp = tse.getNewLeadSelectionPath(); Object o = tp.getLastPathComponent(); // theList.fireTreeSelectionChanged((PathNode)o); theList.fireTreeSelectionChanged((FolderNode) o); } public void fireTreeCollapsed(TreePath path) { super.fireTreeCollapsed(path); TreePath curpath = getSelectionPath(); if (path.isDescendant(curpath)) { setSelectionPath(path); } } public void fireTreeWillExpand(TreePath path) { System.out.println("Path will expand is " + path); } public void fireTreeWillCollapse(TreePath path) { System.out.println("Path will collapse is " + path); } class ExpansionListener implements TreeExpansionListener { FileTree tree; public ExpansionListener(FileTree ft) { tree = ft; } public void treeCollapsed(TreeExpansionEvent tee) { } public void treeExpanded(TreeExpansionEvent tee) { } }}class FileSystemModel implements TreeModel { I_fileSystem theRoot; char fileType = I_fileSystem.DIRECTORY; public FileSystemModel(I_fileSystem fs) { theRoot = fs; } public Object getRoot() { return theRoot; } public Object getChild(Object parent, int index) { return ((I_fileSystem) parent).getChild(fileType, index); } public int getChildCount(Object parent) { return ((I_fileSystem) parent).getChildCount(fileType); } public boolean isLeaf(Object node) { return ((I_fileSystem) node).isLeaf(fileType); } public int getIndexOfChild(Object parent, Object child) { return ((I_fileSystem) parent).getIndexOfChild(fileType, child); } public void valueForPathChanged(TreePath path, Object newValue) { } public void addTreeModelListener(TreeModelListener l) { } public void removeTreeModelListener(TreeModelListener l) { }}interface I_fileSystem { final public static char DIRECTORY = 'D'; final public static char FILE = 'F'; final public static char ALL = 'A'; public Icon getIcon(); public I_fileSystem getChild(char fileType, int index); public int getChildCount(char fileType); public boolean isLeaf(char fileType); public int getIndexOfChild(char fileType, Object child);}/** * A data model for a JTree. This model explorer windows file system directly. * * <p> * Perhaps there is a fatal bug with this design. For speed, each of instances * of this model contains file objects of subdirectory, up to now, there isn't * any method to release them until program be end. I'm afraid that the memory * would be full of if the file system is large enough and JVM memery size * setted too small. * * <p> * I won't pay more attention to solve it. it isn't goal of current a exercise. * * @author Jason */class FolderNode implements I_fileSystem { // private static FolderNode theRoot; private static FileSystemView fsView; private static boolean showHiden = true;; private File theFile; private Vector<File> all = new Vector<File>(); private Vector<File> folder = new Vector<File>(); /** * set that whether apply hiden file. * * @param ifshow */ public void setShowHiden(boolean ifshow) { showHiden = ifshow; } public Icon getIcon() { return fsView.getSystemIcon(theFile); } public String toString() { // return fsView. return fsView.getSystemDisplayName(theFile); } /** * create a root node. by default, it should be the DeskTop in window file * system. * */ public FolderNode() { fsView = FileSystemView.getFileSystemView(); theFile = fsView.getHomeDirectory(); prepareChildren(); } private void prepareChildren() { File[] files = fsView.getFiles(theFile, showHiden); for (int i = 0; i < files.length; i++) { all.add(files[i]); if (files[i].isDirectory() && !files[i].toString().toLowerCase().endsWith(".lnk")) { folder.add(files[i]); } } } private FolderNode(File file) { theFile = file; prepareChildren(); } public FolderNode getChild(char fileType, int index) { if (I_fileSystem.DIRECTORY == fileType) { return new FolderNode(folder.get(index)); } else if (I_fileSystem.ALL == fileType) { return new FolderNode(all.get(index)); } else if (I_fileSystem.FILE == fileType) { return null; } else { return null; } } public int getChildCount(char fileType) { if (I_fileSystem.DIRECTORY == fileType) { return folder.size(); } else if (I_fileSystem.ALL == fileType) { return all.size(); } else if (I_fileSystem.FILE == fileType) { return -1; } else { return -1; } } public boolean isLeaf(char fileType) { if (I_fileSystem.DIRECTORY == fileType) { return folder.size() == 0; } else if (I_fileSystem.ALL == fileType) { return all.size() == 0; } else if (I_fileSystem.FILE == fileType) { return true; } else { return true; } } public int getIndexOfChild(char fileType, Object child) { if (child instanceof FolderNode) { if (I_fileSystem.DIRECTORY == fileType) { return folder.indexOf(((FolderNode) child).theFile); } else if (I_fileSystem.ALL == fileType) { return all.indexOf(((FolderNode) child).theFile); } else if (I_fileSystem.FILE == fileType) { return -1; } else { return -1; } } else { return -1; } }}class FolderRenderer extends DefaultTreeCellRenderer { private static final long serialVersionUID = 1L; public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { I_fileSystem node = (I_fileSystem) value; Icon icon = node.getIcon(); setLeafIcon(icon); setOpenIcon(icon); setClosedIcon(icon); return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); }}希望本文所述对大家的java程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
打开资源管理器的三种方式分别是: 旧版本的Windows把“文件资源管理器”叫做“资源管理器”。“文件资源管理器”是Windows系统提供的资源管理工具,我们
在windows的资源管理器中不能对文件进行编辑操作,资源管理器可以对机器中的文件资源进行管理,如重命名、移动和删除等;编辑文件不是资源管理器的功能,因为不同的
电脑的资源管理器的位置: 1、可以从“开始”菜单中依次选择“程序→附件→Windows资源管理器”就可以启动资源管理器; 2、还可以在桌面上的“我的电脑”、
电脑下载的文件在Windows资源管理器页面,具体查找方法如下: 1、双击Windows系统桌面上的计算机图标; 2、打开Windows资源管理器页面之后,
windows资源管理器是windows系统当中提供给用户的一种资源管理工具。相关操作人员可以利用它,查看电脑当中的任何资源。尤其是windows资源管理器