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

📄 explorer.java

📁 这是计算机专业操作系统课程的课程设计
💻 JAVA
字号:
/**
 *定义资源管理器类,包括初始化,点击tree和list事件的监听,树的展开与收缩监听
 *调用FileNode.java构造目录树
 */
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.util.EventObject;
import java.util.*;

public class Explorer extends JFrame implements TreeExpansionListener,TreeSelectionListener, ActionListener 
//资源管理器类实现:树展开监听器,选择树监听器,列表的单击动作监听器
{
    final JTree tree = new JTree(createTreeModel());//定义树型
    final JPanel list = new JPanel(new GridLayout(19,3));//定义列表
    final JSplitPane split;
    final JPanel jPanel1 = new JPanel(new BorderLayout());//添加面板
    final JLabel jLabel1 = new JLabel(" ");//记录所选择文件的路径
    final JLabel jLabel2 = new JLabel("中国民航大学 05B 张浩");
    public Explorer() 
    {
        //******初始化窗体,将其设置在正中
        Dimension dimension = getToolkit().getScreenSize();
        int i = (dimension.width - 640) / 2;
        int j = (dimension.height - 480) / 2;
        setBounds(i, j, 640, 480);
        //******
        setTitle("资源管理器");
        //******关闭窗口事件
        addWindowListener
        (
        new WindowAdapter() 
        {
            public void windowClosing(WindowEvent windowevent) 
            {
                System.exit(0);
            }
        }
        );
        //******
        //******初始化树tree和list
        JScrollPane treeView = new JScrollPane(tree);
        treeView.setPreferredSize(new Dimension(200,200));
        
        JScrollPane listView = new JScrollPane(list);
        listView.setPreferredSize(new Dimension(300,600));

        split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,treeView,listView);
        split.setLastDividerLocation(600);
        getContentPane().add(split);
        list.setBackground(Color.white);
        //******
        tree.addTreeExpansionListener(this);
        tree.addTreeSelectionListener(this);
        
        try 
        {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            SwingUtilities.updateComponentTreeUI(this);
        } 
        catch (Exception ex) {}
        
        //******设置地址栏的位置
        getContentPane().add(jLabel2,BorderLayout.SOUTH);
        getContentPane().add(jPanel1, BorderLayout.NORTH);
        jPanel1.add(jLabel1, BorderLayout.CENTER);
        //******
    }
//****************************实现借口TreeExpansionEvent的方法
    public void treeCollapsed(TreeExpansionEvent e) {}

    public void treeExpanded(TreeExpansionEvent e) 
    {
        if (tree.getLastSelectedPathComponent() == null) //返回当前选择的第一个节点中的最后一个路径组件
        {
            return;
        }
        if (tree.getLastSelectedPathComponent().toString().trim().equals("Local")) 
        {
            return;
        }
        TreePath path = e.getPath();//获得节点的路径
        //!!!!!!!!!!!
        FileNode node = (FileNode) path.getLastPathComponent();
        if (!node.isExtended()) 
        {
            DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
            node.Extend();
            model.nodeStructureChanged(node);
        }
        //!!!!!!!!!!!!!!!
    }
//*******************************************************************
  
//**********************************************实现接口TreeSelectionEvent的方法

    public void valueChanged(TreeSelectionEvent e)
    //该方法在改变选择项时调用
    {
        try 
        {
            if (tree.getLastSelectedPathComponent() == null) 
            {
                return;
            }
            list.removeAll();
            if (tree.getLastSelectedPathComponent().toString().trim().equals("Local"))
                //点击local返回各盘根目录
            {
                File roots[] = File.listRoots();
                for (int i = 1; i < roots.length; i++) 
                {
                    String DiskName = roots[i].toString();
                    DiskName = DiskName.substring(0, DiskName.indexOf(":")+1);//D:\->D:
                    addButton(DiskName, "");//通过addButton将盘符添加到list中
                }
            } 
            else 
            {
                Object[] path = e.getPath().getPath();//返回第一个路径元素的路径
                String fileInfo = "";//记录当前文件的路径和名称
                for (int i = 1; i < path.length; i++) 
                {
                    fileInfo += File.separator + path[i].toString();
                }
                File f = new File(fileInfo.substring(1));
                //System.out.print(fileInfo);//\C:\\WINDOWS
                jLabel1.setText(f.toString());
                String[] Tlist = f.list();
                Vector vFile = new Vector(), vDir = new Vector();
                for (int i = 0; i < Tlist.length; i++) 
                {
                    if ((new File(fileInfo + File.separator + Tlist[i])).isDirectory()) 
                    {
                        vDir.addElement(Tlist[i]);
                    } 
                    else 
                    {
                        vFile.addElement(Tlist[i]);
                    }
                }
                sortElements(vFile);
                sortElements(vDir);
                for (int i = 0; i < vDir.size(); i++) {
                    addButton((String) (vDir.elementAt(i)), fileInfo);
                }
                for (int i = 0; i < vFile.size(); i++) {
                    addButton((String) (vFile.elementAt(i)), fileInfo);
                }
            }
            list.doLayout();
            list.repaint();
        } 
        catch (Exception ee) {}
    }
//**********************************************************************************

//************************************************将list中的项按首字母排序
    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++) 
            {
                if (((String) (v.elementAt(j))).toLowerCase().compareTo(((String) (v.elementAt(k))).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);
    }
//****************************************

 //*************list中项目以按钮形式出现,每个文件为一个按钮
    private void addButton(String fileName, String filePath) 
    {
        JButton btt = new JButton(fileName);
        btt.setBorder(null);
        btt.setHorizontalAlignment(SwingConstants.LEFT);
        btt.setBackground(Color.white);
        //******为按钮添加图标
        if ((new File(filePath + File.separator + fileName)).isDirectory()) 
        {
            btt.setIcon(UIManager.getIcon("Tree.closedIcon"));
        } 
        else 
        {
            btt.setIcon(UIManager.getIcon("Tree.leafIcon"));
        }
        //******
        list.add(btt);
        btt.addActionListener(this);
    }
//******************************************
    
 //********************************点击tree中的节点和list中的按钮出发事件
    public void actionPerformed(ActionEvent e) 
    {
        try
         {
            TreePath p = tree.getLeadSelectionPath();//点击tree
            String fileName = ((JButton) (e.getSource())).getText();//点击list
            Object[] path = p.getPath();
            String fileInfo = "";
            for (int i = 1; i < path.length; i++) 
            {
                fileInfo += File.separator + path[i].toString();//file.separator为分割符"\"
            }
            //System.out.print(ss);//\C:\\C:\\Borland
            fileInfo = fileInfo.substring(1);
            File f = new File(fileInfo + File.separator + fileName);
            jLabel1.setText(f.toString());
            if (f.isDirectory()) 
                //当选择项为文件夹时
            {
                int index = tree.getRowForPath(p);
                tree.expandRow(index);
                while (!(tree.getLastSelectedPathComponent().toString().trim().equals(fileName))) 
                {
                    tree.setSelectionRow(index++);
                }
                tree.expandRow(index - 1);
            }
            else 
            {//为文件时,当遇如下后缀时,用记事本将其打开
                jLabel2.setText("文件大小:"+f.length()+"B");//显示文件大小
                String postfix = fileName.toUpperCase();
                if (
                	postfix.indexOf(".TXT") != -1 ||
                        postfix.indexOf(".JAVA") != -1 ||
                        postfix.indexOf(".HTM") != -1 ||
                        postfix.indexOf(".LOG") != -1
                   ) 
                {
                    Runtime.getRuntime().exec("NotePad.exe " + fileInfo +File.separator + fileName);
                   // System.out.println(fileInfo +File.separator + fileName);
                    //System.out.println(fileInfo);
                     //System.out.println(File.separator);
                      //System.out.println(fileName);
                }
            }
        } 
        catch (Exception ee) {}
    }
//***************************************************************
    
//*********************************初始化树型,获得本地文件系统,将根目录赋给树
    private DefaultMutableTreeNode createTreeModel() 
    {
        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Local");//创建树的根节点
        File[] rootPath = File.listRoots();//列出可用的文件系统根目录c: d: e: f:
        for (int i = 1; i < rootPath.length; i++) 
        {
            FileNode Node = new FileNode(rootPath[i]);
            Node.Extend();
            rootNode.add(Node);
        }
        return rootNode;
    }
//****************************************************************************
    
    public static void main(String args[]) 
    {
        Explorer ex =new Explorer();
        ex.setVisible(true);
    }
}

⌨️ 快捷键说明

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