Java实现的Windows资源管理器实例_java

本文实例讲述了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程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, windows
资源管理器
java实现资源管理器、java工作流实现实例、java实现推荐算法实例、电商秒杀java实现实例、java单链表实现实例,以便于您获取更多的相关知识。

时间: 2024-09-20 02:25:31

Java实现的Windows资源管理器实例_java的相关文章

用vbs实现在启动 Windows 资源管理器时打开特定文件夹_vbs

my-script.vbs "c:\scripts" 在文件夹路径的两端必须加双引号吗?本例中不需要.但是,如果路径中有空格,则必须加双引号.以下命令行将不起作用: my-script.vbs c:\documents and settings\kmyer 只要是向脚本传递包含空格的参数,就必须将整个参数括在双引号内(否则无需如此).换句话说: my-script.vbs "c:\documents and settings\kmyer" 这就是命令解释程序的工作方

用PHP实现windows资源管理器风格的树型菜单

window|菜单 以下是一个风格类似windows资源管理器的树型菜单 将下面的脚本包含到你的页面中 另外需要从资源管理器中截取一些gif图片,祥见脚本中的注释 菜单结构文件的格式为: tree level|item text|item link|link target|last item in subtree 例如 .<b>Demo menu</b>|javascript: alert('This is the demo menu for TreeMenu 1.0'); ..&

Windows资源管理器Web视图界面

当我们使用Windows资源管理器(Exporlor)时,看到左边的视图能够显示所选目标的相关信息,比较好用. 本例是一个简单的Web视图界面示例,不过左边不是一个Web视图,而是一个FormView.界面如下图所示: 图一 程序运行画面 本例是最简单的SDI工程,在View中创建了两个View: int CXindowView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1

Win7的Windows资源管理器总是重启怎么办

  Win7系统Windows资源管理器总是重启的具体解决步骤吧. 具体步骤如下: 一:启动系统配置实用程序 1.使用具有管理员权限的帐户登录到计算机. 2.单击开始菜单,在搜索框中输入msconfig,回车. 如果系统提示输入管理员密码或进行确认,输入密码或单击"继续". 二:配置"有选择的启动"选项 1.在"常规"项中,点击"有选择的启动",勾选下方的"加载启动项". 2.在"服务"

开机时Windows资源管理器已停止工作怎么解决?

开机时Windows资源管理器已停止工作怎么解决?    工具/原料 一台电脑 Windows资源管理器 方法/步骤 首先点击对话框中的"关闭程序",不用Windows自动地联机检查解决方案,因为它压根什么都解决不了. 同时按住"Ctrl"+"Alt"+"Del"键,这时候电脑上的Windows资源管理器会出现,点击五个选项中的最后一个"启动任务管理器(T)",这时候会蹦出来一个Windows资源管理器的对

解决win7系统经常出现&quot;Windows资源管理器正在重新启动&quot;的方法

win7系统依旧是目前使用最广泛,最普遍的电脑系统,尽管win8.win10系统相继又出现了各种丰富的功能,但是大家对win7系统的熟悉,以及win7系统本身的功能强大,依旧在系统比例上占主导.虽然win7系统的性能优良,但是也出现大大小小的问题,今天小编就为大家介绍win7旗舰版电脑经常弹出Windows资源管理器正在重新启动提示.遇到这个问题无非是以下几个原因导致的: 1.系统资源被占用过 2.电脑配置过低 3.病毒感染只要按照下面的解释详细解决就能解决问题. 解决win7系统经常出现"Wi

windows资源管理器已停止工作怎么解决

我们在开机显示桌面时或打开程序或打开某些文件夹时经常出现"Windows资源管理器 已停止工作"报错对话框,如下图所示: 原因分析: 此现象是系统文件损坏或资源管理器在加载第三方插件出现错误,或部分软件安装后冲突导致. 解决方法: 通过Windows系统"可靠性监视器"的"查看可靠性历史记录"功能,可以快速找到影响系统稳定的程序. "可靠性监视器"是提供系统稳定性的大体情况以及趋势分析,具有可能会影响系统总体稳定性的个别事件的

windows资源管理器老是重启怎么解决

最近有网友反馈电脑经常会出现每隔一段时间windows资源管理器自动重启的情况,严重影响到的用户使用电脑,那么资源管理器老是重启是怎么回事,又该如何解决呢?下面本文将与大家分享下如何解决windows资源管理器老是重启. windows资源管理器重启提示 windows资源管理器重启的原因: 产生windows资源管理器重启的最根本原因是系统资源不足导致,此类问题可能是软件问题,当然也可能是硬件问题.对于解决办法我们通常是先从软件入手,最后再到硬件的排除思路. 资源管理器重启的原因有很多,一般出

windows资源管理器已停止工作怎么办

  由于软件等未知原因,win7经常会出"windows资源管理器已停止工作"的警告对话框,关闭后又会反复出现,很是烦人.经过小编尝试多种方法,终于找到了根本解决方法. 方法/步骤 首先,我们要找到出现这个问题的原因.当出现这个窗口时,我们打开出错对话框中的"查看问题详细信息". 在"查看问题详细信息"列表中,我们找到出错的模块文件. 接下来,我们要确定此文件的具体位置. 打开开始菜单,运行 cmd 在命令提示窗口中输入dir c:kishmpg