⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winexplorer.java

📁 一个简单的类似windows浏览器的Applet
💻 JAVA
字号:
package myapplet;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.DateFormat;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.tree.*;
import javax.swing.filechooser.*;
import java.io.*;
import java.io.File;
import java.util.*;

public class WinExplorer extends JPanel implements TreeSelectionListener{

 JToolBar toolBar = new JToolBar();
 JButton bttUp = new JButton();
 Icon iconUp=UIManager.getIcon("FileChooser.upFolderIcon");
 JLabel statusBar = new JLabel();
 DetailTable detailTable = new DetailTable();
 JScrollPane sp = new JScrollPane(detailTable);
 JSplitPane split = new JSplitPane();
 FileSystemView fileSystemView=FileSystemView.getFileSystemView();
 File root=fileSystemView.getRoots()[0];
 FileNode rt=new FileNode(fileSystemView.getRoots()[0]);//setRoot();
 DefaultTreeModel treeModel=new DefaultTreeModel(rt);
 JTree tree = new JTree(treeModel);
 TreePath recordTp=new TreePath(rt);
 public FileNode setRoot(){
   FileNode root1=new FileNode(fileSystemView.getRoots()[0]);
   File[] file=root.listFiles();
   for(int f=0;f<file.length;f++){
     if(file[f].isDirectory()){
//       System.out.println("this root direcctory is " + file[f].toString());
       root1.add(new FileNode(file[f]));
     }
   }
   return root1;
 }
 public static void setDisplay(){
   try {
       UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
       Font font=new Font("宋体",Font.PLAIN,12);
       String names[]={"Label","CheckBox","PopupMenu","TextPane",
                      "MenuItem","CheckBoxMenuItem","RadioButtonMenuItem",
                      "ComboBox","Button","Tree","ScrollPane","TabbedPane",
                      "EditorPane","TitledBorder","Menu","TextArea","OptionPane",
                      "MenuBar","ToolBar","ToggleButton","ToolTip","ProgressBar",
                      "TableHeader","Panel","List","ColorChooser","PasswordField",
                      "TextField","Table","Label","Viewport","RadioButtonMenuItem",
                      "RadioButton"};
       for(int i=0;i<names.length;i++)UIManager.put(names[i]+".font",font);
       UIManager.put("Label.foreground",Color.black);
       UIManager.put("Border.foreground",Color.black);
       UIManager.put("TitledBorder.titleColor",Color.black);

    }catch(Exception e){
       e.printStackTrace();
    }
 }

/* public static void main(String argv[]){
     WinExplorer we=new WinExplorer();
     we.setVisible(true);
     we.show();
 }*/
 public WinExplorer() {

   setDisplay();
   this.setLayout(new BorderLayout());
   Dimension dimension = getToolkit().getScreenSize();
   int i = (dimension.width - 640) / 2;
   int j = (dimension.height - 480) / 2;
   setBounds(i,j,640,480);
   statusBar.setText(" ");

   bttUp.setIcon(iconUp);
   bttUp.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(ActionEvent e) {
       try{
           TreePath upPath=tree.getSelectionPath().getParentPath();

           if(upPath!=null){
                 tree.setSelectionPath(upPath);
                 tree.scrollPathToVisible(upPath);
           }
        }catch(Exception ex){}
     }
   });
   split.setDividerSize(6);
   split.setLeftComponent(new JScrollPane(tree));
   split.setRightComponent(sp);
   split.setDividerLocation(180);
   sp.getViewport().setBackground(Color.white);

   this.add(toolBar, BorderLayout.NORTH);
   toolBar.add(bttUp, null);
   this.add(statusBar, BorderLayout.SOUTH);
   this.add(split, BorderLayout.CENTER);
   tree.addTreeExpansionListener(new MyExpandsionListener());
   tree.setCellRenderer(new MyTreeCellRenderer());
   tree.addTreeSelectionListener(this);
   tree.setComponentOrientation(ComponentOrientation.UNKNOWN);

 }

 public void valueChanged(TreeSelectionEvent e){
    Object obj=tree.getLastSelectedPathComponent();
    recordTp=e.getPath();
    if(obj==null)return;
    else {
      detailTable.setParent( ( (FileNode) obj).getFile());
    }
 }

 class MyTreeCellRenderer extends DefaultTreeCellRenderer {
   public MyTreeCellRenderer() {}
   public Component getTreeCellRendererComponent(JTree tree,Object value,
             boolean sel,boolean expanded,boolean leaf,int row,boolean hasFocus) {
       super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row,hasFocus);
       setIcon(fileSystemView.getSystemIcon(((FileNode)value).getFile()));
       return this;
   }
 }
 class MyExpandsionListener implements TreeExpansionListener {
   public MyExpandsionListener() {}
   public void treeExpanded(TreeExpansionEvent event) {
       if (tree.getLastSelectedPathComponent()==null){return;}
       tree.setCursor(new Cursor(Cursor.WAIT_CURSOR));
       TreePath path =event.getPath();
       FileNode node = (FileNode)path.getLastPathComponent();
       node.explore();
       treeModel.nodeStructureChanged(node);
       tree.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
   }
   public void treeCollapsed(TreeExpansionEvent event) {}
 }
 class FileNode extends DefaultMutableTreeNode {

     private boolean explored = false;
     public FileNode(File file)  { setUserObject(file); }
     public boolean getAllowsChildren() { return isDirectory(); }
     public boolean isLeaf()     { return !isDirectory();}
     public File getFile()        { return (File)getUserObject(); }
     public boolean isExplored() { return explored; }
     public void setExplored(boolean b){ explored=b;}
     public boolean isDirectory() { return getFile().isDirectory();}
     public String toString() {
         File file = (File)getUserObject();
         String filename = file.toString();
         int index = filename.lastIndexOf(File.separator);
         return (index != -1 && index != filename.length()-1)
                   ? filename.substring(index+1) : filename;
     }
     public void explore() {
         if(!isExplored()) {
             File file = getFile();
             File[] children = file.listFiles();
             if(children==null||children.length==0)return;
             for(int i=0; i < children.length; ++i)
             {
                  File f=children[i];
                  if(f.isDirectory())add(new FileNode(children[i]));
             }
             explored = true;
         }
    }
 }
 class DetailTable extends JTable{
       DetailTableModel model=new DetailTableModel();
       public DetailTable(){
           setModel(model);
           setShowGrid(false);
           TableColumnModel colModel = getColumnModel();
           for (int i=0;i<3;i++)
             colModel.getColumn(i).setCellRenderer(new DetailsTableCellRenderer());
           setRowHeight(18);
           this.addMouseListener(new MouseAdapter(){
               public void mouseClicked(MouseEvent e) {
                   if(e.getClickCount()==2){
                      for (int i = 0; i <getRowCount(); i++) {
                           if(getCellRect(i,0,true).contains(e.getPoint())){
                               openSelect(model.getValueAt(getSelectedRow(),0));
                               break;
                           }
                       }
                   }
               }
           });
       }
       public void openSelect(Object obj){
//           Object obj=model.getValueAt(getSelectedRow(),0);
           if(obj==null)return;
           File f=(File)obj;
           if(f.isDirectory()){
               if(obj==null)return;
                else {
                  int index=tree.getRowForPath(recordTp);
                  tree.setSelectionRow(index);
                  tree.expandRow(index);
                  String strName="";
                  if(tree.getLastSelectedPathComponent()==null)return;
                  else{
                    if(fileSystemView.isDrive(f)||f.getName().trim().equals("ShellFolder:"))
                      strName=f.toString();
                      else{
                          strName=f.getName();
                      }
             //         System.out.println("the last selected path component "+tree.getLastSelectedPathComponent().toString()+" ths strname is "+strName);
                  while (!(tree.getLastSelectedPathComponent().toString().trim().equals(strName))){
                    tree.setSelectionRow(index++);
                  }
                  tree.setSelectionPath(tree.getPathForRow(index-1));
                  tree.expandRow(index-1);
                  }
                }

           }
           else{
            try {
              String osname=System.getProperty("os.name");
              if(osname.equals("Windows 2000")||osname.equals("Windows xp")){
                Process p = Runtime.getRuntime().exec("cmd.exe /c \"" + f.getPath() +
                                                      "\"");
              }
            }
            catch (IOException ex) {
            }
           }
       }
       public void setParent(File parent){
           model.removeAllRows();
           File list[]=parent.listFiles();
           if(list==null)return;
           Vector vDir=new Vector(),vFile=new Vector();
           for (int i = 0; i < list.length; i++) {
               if(list[i].isDirectory()&&!(list[i].getName().trim().equals("ShellFolder:")))vDir.add(list[i]);
               else vFile.add(list[i]);
           }
         sortElements(vFile);
           sortElements(vDir);
            for (int i = 0; i < vDir.size(); i++)model.addFile((File)vDir.elementAt(i));
           for (int i = 0; i < vFile.size(); i++)model.addFile((File)vFile.elementAt(i));
    }
       public void sortElements(Vector v)
        {
           for(int i=0;i<v.size();i++)
           {
                int k=i;
                for(int j=i+1;j<v.size();j++){
                    File fa=(File)v.elementAt(j);
                    File fb=(File)v.elementAt(k);
                    if(fileSystemView.getSystemDisplayName(fa).toLowerCase().compareTo(
                         fileSystemView.getSystemDisplayName(fb).toLowerCase())<0)k=j;
                }
                if(k!=i)swap(k,i,v);
           }
        }
        private void swap(int loc1,int loc2,Vector v){
            Object tmp=v.elementAt(loc1);
            v.setElementAt(v.elementAt(loc2),loc1);
            v.setElementAt(tmp,loc2);
        }
       class DetailTableModel extends DefaultTableModel {
           public DetailTableModel() {
               addColumn("名称");
               addColumn("大小");
               addColumn("修改时间");
           }
           public void addFile(File f){
               addRow(new Object[]{f,new Double(f.length()/1024),
                    new java.sql.Date(f.lastModified())});
           }
           public void removeAllRows(){
               while(getRowCount()!=0) removeRow(0);
           }
           public boolean isCellEditable(int row, int column) {return false;}
       }
       class DetailsTableCellRenderer extends DefaultTableCellRenderer {
         DetailsTableCellRenderer() {}
         public Component getTableCellRendererComponent(JTable table, Object value,
                               boolean isSelected, boolean hasFocus, int row, int column) {
             if (column == 1){
                 setHorizontalAlignment(SwingConstants.TRAILING);
                 isSelected=hasFocus=false;
             }else if(column==2){
                 setHorizontalAlignment(SwingConstants.CENTER);
                 isSelected=hasFocus=false;
             }else setHorizontalAlignment(SwingConstants.LEADING);
             return super.getTableCellRendererComponent(
                         table, value, isSelected, hasFocus, row, column);
         }
         public void setValue(Object value) {
             setIcon(null);
             if (value instanceof File) {
                 File file = (File)value;
                 setText(fileSystemView.getSystemDisplayName(file));
                 setIcon(fileSystemView.getSystemIcon(file));
             }else{
                 super.setValue(value);
             }
         }
     }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -