设为首页收藏本站

SKY外语、计算机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7104|回复: 2
打印 上一主题 下一主题

[其他] Java实现windows资源管理器

[复制链接]

12

主题

5

好友

425

积分

中级会员

Rank: 3Rank: 3

生肖
星座
摩羯座
性别

最佳新人 活跃会员 灌水之王 论坛元老

跳转到指定楼层
楼主
发表于 2012-6-11 19:34:02 |只看该作者 |倒序浏览
本帖最后由 sky_yx 于 2015-12-30 14:10 编辑

FileList.java

  1. package com.etop.windows;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import javax.swing.JLabel;
  5. import javax.swing.JList;
  6. import javax.swing.ListCellRenderer;
  7. import javax.swing.ListModel;
  8. import javax.swing.event.ListDataListener;
  9. public class FileList extends JList{
  10.     FileListModel dataModel;
  11.     static final long serialVersionUID = 10;
  12.     public FileList() {
  13.         dataModel = new FileListModel();
  14.         setModel(dataModel);
  15.     }
  16.     public void fireTreeSelectionChanged(I_fileSystem node) {
  17.         updateUI();
  18.     }
  19. }
  20. class FileListModel implements ListModel {
  21.     FileList theList;
  22.     I_fileSystem node;
  23.     char fileType = I_fileSystem.ALL;
  24.     public void setNode (I_fileSystem node) {
  25.         this.node = node;
  26.     }
  27.     public Object getElementAt(int index) {
  28.         if (node != null) {
  29.             return ((I_fileSystem)node).getChild(fileType, index);
  30.         } else {
  31.             return null;
  32.         }
  33.     }
  34.     public int getSize() {
  35.         if (node != null) {
  36.             return ((I_fileSystem)node).getChildCount(fileType);
  37.         } else {
  38.             return 0;
  39.         }      
  40.     }
  41.     public void addListDataListener(ListDataListener l) {
  42.     }
  43.     public void removeListDataListener(ListDataListener l) {
  44.     }
  45. }
  46. class MyCellRenderer extends JLabel implements ListCellRenderer {
  47.     public MyCellRenderer() {
  48.         setOpaque(true);
  49.     }
  50.     public Component getListCellRendererComponent(JList list,Object value,int index,
  51.             boolean isSelected,boolean cellHasFocus){
  52.         FolderNode node = (FolderNode)value;
  53.         setIcon(node.getIcon());
  54.         setText(value.toString());
  55.         setBackground(isSelected ? Color.BLUE.darker().darker(): Color.WHITE);
  56.         setForeground(isSelected ? Color.WHITE : Color.BLACK);
  57.         return this;
  58.     }
  59. }
复制代码
FileTree.java

  1. package com.etop.windows;
  2. import java.awt.Component;
  3. import java.io.File;
  4. import java.util.Vector;
  5. import javax.swing.Icon;
  6. import javax.swing.JTree;
  7. import javax.swing.event.TreeExpansionEvent;
  8. import javax.swing.event.TreeExpansionListener;
  9. import javax.swing.event.TreeModelListener;
  10. import javax.swing.event.TreeSelectionEvent;
  11. import javax.swing.event.TreeSelectionListener;
  12. import javax.swing.filechooser.FileSystemView;
  13. import javax.swing.tree.DefaultTreeCellRenderer;
  14. import javax.swing.tree.TreeModel;
  15. import javax.swing.tree.TreePath;
  16. public class FileTree extends JTree {
  17.     static final long serialVersionUID = 0;
  18.     private FileList theList;
  19.     public FileTree(FileList list) {
  20.         theList = list;
  21.         setModel(new FileSystemModel(new FolderNode()));
  22.         addTreeSelectionListener(new TreeSelectionListener() {
  23.             public void valueChanged(TreeSelectionEvent tse) {
  24.             }
  25.         });     
  26.     }
  27.     public void fireValueChanged(TreeSelectionEvent tse) {
  28.         TreePath tp = tse.getNewLeadSelectionPath();
  29.         Object o = tp.getLastPathComponent();
  30.         theList.fireTreeSelectionChanged((FolderNode) o);
  31.     }
  32.    
  33.     public void fireTreeCollapsed(TreePath path) {
  34.         super.fireTreeCollapsed(path);
  35.         TreePath curpath = getSelectionPath();
  36.         if (path.isDescendant(curpath)) {
  37.             setSelectionPath(path);
  38.         }
  39.     }
  40.    
  41.     public void fireTreeWillExpand(TreePath path) {
  42.         System.out.println("Path will expand is " + path);
  43.     }
  44.     public void fireTreeWillCollapse(TreePath path) {
  45.         System.out.println("Path will collapse is " + path);
  46.     }
  47.     class ExpansionListener implements TreeExpansionListener {
  48.         FileTree tree;
  49.         public ExpansionListener(FileTree ft) {
  50.             tree = ft;
  51.         }
  52.         public void treeCollapsed(TreeExpansionEvent tee) {
  53.         }
  54.         public void treeExpanded(TreeExpansionEvent tee) {
  55.         }
  56.     }
  57. }
  58. class FileSystemModel implements TreeModel {
  59.     I_fileSystem theRoot;
  60.     char fileType = I_fileSystem.DIRECTORY;
  61.     public FileSystemModel(I_fileSystem fs) {
  62.         theRoot = fs;
  63.     }
  64.     public Object getRoot() {
  65.         return theRoot;
  66.     }
  67.     public Object getChild(Object parent, int index) {
  68.         return ((I_fileSystem) parent).getChild(fileType, index);
  69.     }
  70.     public int getChildCount(Object parent) {
  71.         return ((I_fileSystem) parent).getChildCount(fileType);
  72.     }
  73.     public boolean isLeaf(Object node) {
  74.         return ((I_fileSystem) node).isLeaf(fileType);
  75.     }
  76.     public int getIndexOfChild(Object parent, Object child) {
  77.         return ((I_fileSystem) parent).getIndexOfChild(fileType, child);
  78.     }
  79.     public void valueForPathChanged(TreePath path, Object newValue) {
  80.     }
  81.     public void addTreeModelListener(TreeModelListener l) {
  82.     }
  83.     public void removeTreeModelListener(TreeModelListener l) {
  84.     }
  85. }
  86. interface I_fileSystem {
  87.     final public static char DIRECTORY = 'D';
  88.     final public static char FILE = 'F';
  89.     final public static char ALL = 'A';
  90.     public Icon getIcon();
  91.     public I_fileSystem getChild(char fileType, int index);
  92.     public int getChildCount(char fileType);
  93.     public boolean isLeaf(char fileType);
  94.     public int getIndexOfChild(char fileType, Object child);
  95. }
  96. class FolderNode implements I_fileSystem {
  97.     private static FileSystemView fsView;
  98.     private static boolean showHiden = true;;
  99.     private File theFile;
  100.     private Vector<File> all = new Vector<File>();
  101.     private Vector<File> folder = new Vector<File>();
  102.     public void setShowHiden(boolean ifshow) {
  103.         showHiden = ifshow;
  104.     }
  105.     public Icon getIcon() {
  106.         return fsView.getSystemIcon(theFile);
  107.     }
  108.     public String toString() {
  109.         return fsView.getSystemDisplayName(theFile);
  110.     }
  111.    
  112.     public FolderNode() {
  113.         fsView = FileSystemView.getFileSystemView();
  114.         theFile = fsView.getHomeDirectory();
  115.         prepareChildren();
  116.     }
  117.     private void prepareChildren() {
  118.         File[] files = fsView.getFiles(theFile, showHiden);
  119.         for (int i = 0; i < files.length; i++) {
  120.             all.add(files[i]);
  121.             if (files[i].isDirectory()
  122.                     && !files[i].toString().toLowerCase().endsWith(".lnk")) {
  123.                 folder.add(files[i]);
  124.             }
  125.         }
  126.     }
  127.     private FolderNode(File file) {
  128.         theFile = file;
  129.         prepareChildren();
  130.     }
  131.     public FolderNode getChild(char fileType, int index) {
  132.         if (I_fileSystem.DIRECTORY == fileType) {
  133.             return new FolderNode(folder.get(index));
  134.         } else if (I_fileSystem.ALL == fileType) {
  135.             return new FolderNode(all.get(index));
  136.         } else if (I_fileSystem.FILE == fileType) {
  137.             return null;
  138.         } else {
  139.             return null;
  140.         }
  141.     }
  142.     public int getChildCount(char fileType) {
  143.         if (I_fileSystem.DIRECTORY == fileType) {
  144.             return folder.size();
  145.         } else if (I_fileSystem.ALL == fileType) {
  146.             return all.size();
  147.         } else if (I_fileSystem.FILE == fileType) {
  148.             return -1;
  149.         } else {
  150.             return -1;
  151.         }
  152.     }
  153.     public boolean isLeaf(char fileType) {
  154.         if (I_fileSystem.DIRECTORY == fileType) {
  155.             return folder.size() == 0;
  156.         } else if (I_fileSystem.ALL == fileType) {
  157.             return all.size() == 0;
  158.         } else if (I_fileSystem.FILE == fileType) {
  159.             return true;
  160.         } else {
  161.             return true;
  162.         }
  163.     }
  164.     public int getIndexOfChild(char fileType, Object child) {
  165.         if (child instanceof FolderNode) {
  166.             if (I_fileSystem.DIRECTORY == fileType) {
  167.                 return folder.indexOf(((FolderNode) child).theFile);
  168.             } else if (I_fileSystem.ALL == fileType) {
  169.                 return all.indexOf(((FolderNode) child).theFile);
  170.             } else if (I_fileSystem.FILE == fileType) {
  171.                 return -1;
  172.             } else {
  173.                 return -1;
  174.             }
  175.         } else {
  176.             return -1;
  177.         }
  178.     }
  179. }
  180. class FolderRenderer extends DefaultTreeCellRenderer {
  181.     private static final long serialVersionUID = 1L;
  182.     public Component getTreeCellRendererComponent(JTree tree, Object value,
  183.             boolean sel, boolean expanded, boolean leaf, int row,
  184.             boolean hasFocus) {
  185.         I_fileSystem node = (I_fileSystem) value;
  186.         Icon icon = node.getIcon();
  187.         setLeafIcon(icon);
  188.         setOpenIcon(icon);
  189.         setClosedIcon(icon);
  190.         return super.getTreeCellRendererComponent(tree, value, sel, expanded,
  191.                 leaf, row, hasFocus);
  192.     }
  193. }
复制代码
JExplorer.java

  1. package com.etop.windows;
  2. import java.awt.BorderLayout;
  3. import java.awt.Dimension;
  4. import java.awt.Toolkit;
  5. import javax.swing.JFrame;
  6. import javax.swing.JPanel;
  7. import javax.swing.JScrollPane;
  8. import javax.swing.JSplitPane;
  9. import javax.swing.border.BevelBorder;
  10. public class JExplorer {
  11.     public static void main(String[] args) {
  12.         JFrame frame = new JFrame();
  13.         frame.getContentPane().add(new UI(frame));
  14.         frame.pack();
  15.         Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
  16.         int left = (screen.width - frame.getWidth()) / 2;
  17.         int top = (screen.height - frame.getHeight()) / 2;
  18.     }
  19. }
  20. class UI extends JPanel {
  21.     static final long serialVersionUID = 0l;
  22.     static int LEFT_WIDTH = 200;
  23.     static int RIGHT_WIDTH = 300;
  24.     static int WINDOW_HEIGHT = 300;
  25.     JFrame frame = null;
  26.     public UI(JFrame frame) {
  27.         this.frame = frame;
  28.         setPreferredSize(new Dimension(800, 600));
  29.         setBorder(new BevelBorder(BevelBorder.LOWERED));
  30.         setLayout(new BorderLayout());
  31.         FileList list = new FileList();
  32.         FileTree tree = new FileTree(list);
  33.         JScrollPane treeView = new JScrollPane(tree);
  34.                 new Dimension(LEFT_WIDTH, WINDOW_HEIGHT));
  35.         JScrollPane listView = new JScrollPane(list);
  36.                 new Dimension(RIGHT_WIDTH, WINDOW_HEIGHT));
  37.         JSplitPane pane =
  38.             new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treeView,listView);
  39.         add(pane);
  40.     }
  41. }
复制代码


分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享淘帖0 收藏收藏0 评分评分

60

主题

8

好友

1161

积分

金牌会员

Rank: 6Rank: 6

生肖
星座
处女座
性别

最佳新人 活跃会员 灌水之王 论坛元老

沙发
发表于 2012-6-11 20:30:29 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:10 编辑

我顶

你老婆要生了。我要当爹了
回复

使用道具 评分 举报

12

主题

5

好友

425

积分

中级会员

Rank: 3Rank: 3

生肖
星座
摩羯座
性别

最佳新人 活跃会员 灌水之王 论坛元老

板凳
发表于 2012-8-1 22:50:43 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:10 编辑

我顶[/quote]
顶你个肺啊

回复

使用道具 评分 举报

您需要登录后才可以回帖 登录 | 立即注册


手机版|SKY外语计算机学习 ( 粤ICP备12031577 )    

GMT+8, 2024-12-23 01:46 , Processed in 0.124184 second(s), 26 queries .

回顶部