| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
JamalErx
10年前发布

java 资源浏览器的图形化组件

资源浏览器的图形化组件

FileList.java

import java.awt.*;  import javax.swing.*;  import javax.swing.event.*;    public class FileList extends JList<Object> {      class FileListModel implements ListModel<Object> {          private FolderNode node;          private final static char ALL = 'A';          char fileType = ALL;            public void setNode(FolderNode node) {              this.node = node;          }            public FolderNode getElementAt(int index) {              if (node != null)                  return node.getChild(fileType, index);              else                  return null;          }            public int getSize() {              if (node != null)                  return node.getChildCount(fileType);              else                  return 0;          }            public void addListDataListener(ListDataListener l) {          }            public void removeListDataListener(ListDataListener l) {          }      }        class MyCellRenderer extends JLabel implements ListCellRenderer<Object> {          private static final long serialVersionUID = 1L;            public MyCellRenderer() {              setOpaque(true);          }            public Component getListCellRendererComponent(JList<?> list,                  Object value, int index, boolean isSelected,                  boolean cellHasFocus) {              FolderNode node = (FolderNode) value;              setIcon(node.getIcon());              setText(value.toString());              setBackground(isSelected ? Color.BLUE.darker().darker()                      : Color.WHITE);              setForeground(isSelected ? Color.WHITE : Color.BLACK);              return this;          }      }        FileListModel dataModel;      static final long serialVersionUID = 10;        public FileList() {          dataModel = new FileListModel();          setModel(dataModel);          this.setCellRenderer(new MyCellRenderer());      }        public void fireTreeSelectionChanged(FolderNode node) {          dataModel.setNode(node);          updateUI();      }  }

I_fileSystem.java

import javax.swing.*;    public 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 String getFullPath();       public int getChildCount(char fileType);        public boolean isLeaf(char fileType);        public int getIndexOfChild(char fileType, Object child);    }

FileTree.java

import java.awt.*;  import javax.swing.*;  import javax.swing.event.*;  import javax.swing.tree.*;    public class FileTree extends JTree {      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);            }        }      class FileSystemModel implements TreeModel {            I_fileSystem theRoot;          public FileSystemModel(I_fileSystem fs) {                theRoot = fs;            }            public Object getRoot() {                return theRoot;            }            public Object getChild(Object parent, int index) {                return ((I_fileSystem) parent).getChild(I_fileSystem.DIRECTORY, index);            }            public int getChildCount(Object parent) {                return ((I_fileSystem) parent).getChildCount(I_fileSystem.DIRECTORY);            }            public boolean isLeaf(Object node) {                return ((I_fileSystem) node).isLeaf(I_fileSystem.DIRECTORY);            }            public int getIndexOfChild(Object parent, Object child) {                return ((I_fileSystem) parent).getIndexOfChild(I_fileSystem.DIRECTORY, child);            }            public void valueForPathChanged(TreePath path, Object newValue) {            }            public void addTreeModelListener(TreeModelListener l) {            }            public void removeTreeModelListener(TreeModelListener l) {            }        }      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();          theList.fireTreeSelectionChanged((FolderNode) tp.getLastPathComponent());      }        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) {          }        }    }

FolderNode.java

import java.io.*;  import java.util.*;  import javax.swing.*;  import javax.swing.filechooser.*;    /**   *    * 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   */  public class FolderNode implements I_fileSystem {      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;            }        }        @Override      public String getFullPath() {          return theFile.getAbsolutePath();      }    }

JExplorer.java

import java.awt.*;  import javax.swing.*;  import java.awt.event.*;  import java.awt.datatransfer.*;    public class JExplorer extends JFrame {      private static final long serialVersionUID = 0l;      private static final int LEFT_WIDTH = 200;      private static final int RIGHT_WIDTH = 300;      private static final int WINDOW_HEIGHT = 300;        private JPopupMenu jmTree;      private JPopupMenu jmList;      private FileTree tree;      private FileList list;      public JExplorer() {          super("资源浏览器");          setPreferredSize(new Dimension(800, 600));          setLayout(new BorderLayout());          list = new FileList();          tree = new FileTree(list);          jmTree = new JPopupMenu();          JMenuItem jmiCopyPathName = new JMenuItem("复制目录全路径");          jmiCopyPathName.addActionListener(new ActionListener() {              @Override              public void actionPerformed(ActionEvent arg0) {                  Clipboard clipboard = Toolkit.getDefaultToolkit()                          .getSystemClipboard();                  Transferable tText = new StringSelection(((I_fileSystem) tree                          .getSelectionPath().getLastPathComponent())                          .getFullPath());                  clipboard.setContents(tText, null);              }          });          jmTree.add(jmiCopyPathName);          tree.addMouseListener(new MouseAdapter() {              public void mouseClicked(MouseEvent e) {                  if (e.getButton() == 3 && tree.getSelectionCount() > 0)                      jmTree.show(tree, e.getX(), e.getY());              }          });          tree.setDoubleBuffered(true);          jmList = new JPopupMenu();          JMenuItem jmiCopyFileName = new JMenuItem("复制文件系统对象全路径");          jmiCopyFileName.addActionListener(new ActionListener() {              @Override              public void actionPerformed(ActionEvent arg0) {                  Clipboard clipboard = Toolkit.getDefaultToolkit()                          .getSystemClipboard();                  Transferable tText = new StringSelection(((I_fileSystem)list.getSelectedValue()).getFullPath());                  clipboard.setContents(tText, null);              }          });          jmList.add(jmiCopyFileName);          list.addMouseListener(new MouseAdapter() {              public void mouseClicked(MouseEvent e) {                  if (e.getButton() == 3 && tree.getSelectionCount() > 0)                      jmList.show(list, e.getX(), e.getY());              }          });          list.setDoubleBuffered(true);          JScrollPane treeView = new JScrollPane(tree);          treeView.setPreferredSize(new Dimension(LEFT_WIDTH, WINDOW_HEIGHT));          JScrollPane listView = new JScrollPane(list);          listView.setPreferredSize(new Dimension(RIGHT_WIDTH, WINDOW_HEIGHT));          JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treeView,                  listView);          pane.setDividerLocation(300);          pane.setDividerSize(4);          add(pane);          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          pack();          Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();          int left = (screen.width - getWidth()) / 2;          int top = (screen.height - getHeight()) / 2;          setLocation(left, top);          setVisible(true);      }        public static void main(String[] args) {          new JExplorer();      }  }