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

📄 fileexplorer.java

📁 java GUI编程
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/*
 * Copyright (C) 2004 Sun Microsystems, Inc. All rights reserved. Use is
 * subject to license terms.
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the Lesser GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 * USA.
 */ 

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import javax.swing.table.TableColumn;

import java.net.URL;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.io.IOException;
import java.io.File;

import org.jdesktop.jdic.desktop.*;


/**
 * JDIC API demo main class.
 * <p>
 * The main class for the demo. Class <code>FileExplorer</code> creates a UI 
 * interface demonstrating the usage of the public API of <code>org.jdesktop.jdic.desktop.*
 * </code> classes.
 */
public class FileExplorer extends JPanel {
    public static ImageIcon computerIcon;
    public static ImageIcon driverIcon;
    public static ImageIcon folderIcon;
    public static ImageIcon fileIcon;
    public static ImageIcon browseIcon;

    public static String MY_COMPUTER_FOLDER_PATH = System.getProperty("java.io.tmpdir")
            + File.separator + "My Computer";

    // Currently selected tree node in the left disk tree.
    public static MyTreeNode selectedTreeNode = null;
    // Currently selected file in the right table.
    File selectedFile = null;

    BorderLayout borderLayout1 = new BorderLayout();
    JPopupMenu jDesktopPopupMenu = new JPopupMenu();
    JMenuItem jMenuItemOpen = new JMenuItem();
    JMenuItem jMenuItemEdit = new JMenuItem();
    JMenuItem jMenuItemPrint = new JMenuItem();
    JMenuItem jMenuItemBrowse = new JMenuItem();
    JMenuItem jMenuItemMail = new JMenuItem();

    JSplitPane jSplitPane = new JSplitPane();
    JTree jTreeDisk = new JTree(createTreeModel());

    JScrollPane tableScrollPane = new JScrollPane();
    MyTableModel tableModel = new MyTableModel();
    MyTable jTable = new MyTable();

    JPanel jAddressPanel = new JPanel();
    JLabel jAddressLabel = new JLabel();
    JTextField jAddressTextField = new JTextField();
    JButton jBrowseButton = new JButton();

    MyStatusBar statusBar = new MyStatusBar();

    public FileExplorer() {
        try {
            System.setSecurityManager(null);
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {}

        JFrame frame = new JFrame("JDIC API Demo - FileExplorer");

        Container contentPane = frame.getContentPane();

        contentPane.setLayout(new GridLayout(1, 1));
        contentPane.add(new FileExplorer());

        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        frame.pack();
        frame.setVisible(true);
    }

    private void jbInit() throws Exception {
        try {
            computerIcon = new ImageIcon(FileExplorer.class.getResource("images/Computer.gif"));
            driverIcon = new ImageIcon(FileExplorer.class.getResource("images/Driver.gif"));
            folderIcon = new ImageIcon(FileExplorer.class.getResource("images/Folder.gif"));
            fileIcon = new ImageIcon(FileExplorer.class.getResource("images/File.gif"));
            browseIcon = new ImageIcon(FileExplorer.class.getResource("images/Right.gif"));
        } catch (Exception e) {
            System.out.println("ERROR loading image files !");
        }

        this.setLayout(borderLayout1);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

        this.setPreferredSize(new Dimension(screenSize.width * 4 / 5,
                screenSize.height * 7 / 10));

        jMenuItemOpen.setText("Open");
        jMenuItemOpen.addActionListener(new
                FileExplorer_jMenuItemOpen_actionAdapter(this));
        jMenuItemEdit.setText("Edit");
        jMenuItemEdit.addActionListener(new
                FileExplorer_jMenuItemEdit_actionAdapter(this));
        jMenuItemPrint.setText("Print");
        jMenuItemPrint.addActionListener(new
                FileExplorer_jMenuItemPrint_actionAdapter(this));
        jMenuItemBrowse.setText("Browse");
        jMenuItemBrowse.addActionListener(new
                FileExplorer_jMenuItemBrowse_actionAdapter(this));
        jMenuItemMail.setText("Mail to ...");
        jMenuItemMail.addActionListener(new
                FileExplorer_jMenuItemMail_actionAdapter(this));

        jTreeDisk.addTreeExpansionListener(new
                FileExplorer_jTreeDisk_treeExpansionAdapter(this));
        jAddressLabel.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4));
        jAddressLabel.setToolTipText("");
        jAddressLabel.setText("Address");

        jBrowseButton.setBorder(BorderFactory.createCompoundBorder(new EmptyBorder(0,
                2, 0, 2),
                new EtchedBorder()));
        jBrowseButton.setToolTipText("Browse the given URL with system default browser");
        jBrowseButton.setIcon(browseIcon);
        jBrowseButton.setText("Browse ");
        jBrowseButton.addActionListener(new
                FileExplorer_jBrowseButton_actionAdapter(this));
        jAddressPanel.setLayout(new BorderLayout());

        jAddressTextField.addActionListener(new
                FileExplorer_jAddressTextField_actionAdapter(this));

        jAddressPanel.add(jAddressLabel, BorderLayout.WEST);
        jAddressPanel.add(jAddressTextField, BorderLayout.CENTER);
        jAddressPanel.add(jBrowseButton, BorderLayout.EAST);
        jAddressPanel.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 0));

        jTreeDisk.addMouseListener(new FileExplorer_jTreeDisk_mouseAdapter(this));
        jTreeDisk.addTreeWillExpandListener(new
                FileExplorer_jTreeDisk_treeWillExpandAdapter(this));
        jTreeDisk.setCellRenderer(new MyTreeRenderer());
        jTreeDisk.getSelectionModel().setSelectionMode
                (TreeSelectionModel.SINGLE_TREE_SELECTION);
        jTreeDisk.setSelectionRow(0);
        jTreeDisk.setBackground(Color.white);
        jTreeDisk.setAlignmentX((float) 0.5);
        jTreeDisk.setShowsRootHandles(false);
        jTreeDisk.addTreeSelectionListener(new
                FileExplorer_jTreeDisk_treeSelectionAdapter(this));

        jTable.setBorder(null);
        jTable.setModel(tableModel);
        TableColumn column = jTable.getColumnModel().getColumn(0);

        column.setCellRenderer(new MyTableRenderer());
        column = jTable.getColumnModel().getColumn(1);
        column.setCellRenderer(new MyTableRenderer());

        jTable.setShowHorizontalLines(false);
        jTable.setShowVerticalLines(false);
        jTable.addMouseListener(new FileExplorer_jTable_mouseAdapter(this));

        tableScrollPane.setViewportView(jTable);

        jSplitPane.setBorder(null);
        jSplitPane.add(new JScrollPane(jTreeDisk), JSplitPane.LEFT);
        jSplitPane.add(tableScrollPane, JSplitPane.RIGHT);

        statusBar.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
        statusBar.lblDesc.setText("JDIC API Demo - FileExplorer");

        this.add(jAddressPanel, BorderLayout.NORTH);
        this.add(jSplitPane, BorderLayout.CENTER);
        this.add(statusBar, BorderLayout.SOUTH);
    }
    

    private DefaultTreeModel createTreeModel() {
        // Using "My Computer" as root.
        MyTreeNode rootNode = null;

        String osName = System.getProperty("os.name").toLowerCase();

        if (osName.startsWith("windows")) {
            // Create a temp "My Computer" folder.
            File MY_COMPUTER_FOLDER_FILE = new File(MY_COMPUTER_FOLDER_PATH);

            MY_COMPUTER_FOLDER_FILE.mkdirs();
            // Delete temp file when program exits.
            MY_COMPUTER_FOLDER_FILE.deleteOnExit();

            rootNode = new MyTreeNode(MY_COMPUTER_FOLDER_FILE);

            MyTreeNode parent;
            File[] roots = MyUtility.getRoots();

            // Remove A: drive from the initial list of drives, since whenever the
            // JTree is repaint, it tries to read floppy drive A:\.
            // for (int i = 0; i < roots.length; i++) {
            int readfirst = 0;

            if (roots[readfirst].getPath().toLowerCase().startsWith("a:")) {
                readfirst = 1;
            }
            for (int i = readfirst; i < roots.length; i++) {
                parent = new MyTreeNode(roots[i]);

                parent.explore();

                rootNode.add(parent);
            }

            // By default, use the first non-floppy disk here.
            selectedTreeNode = rootNode;
            selectedFile = null;
        } else if (osName.startsWith("linux") || osName.startsWith("sunos") 
            || osName.startsWith("freebsd") || osName.startsWith("mac os")) {
            File rootFile = new File("/");

            rootNode = new MyTreeNode(rootFile);

            rootNode.explore();
            selectedTreeNode = (MyTreeNode) rootNode;
            selectedFile = selectedTreeNode.getFile();
        } else {
            throw new UnsupportedOperationException("The demo is not "
                    + "supported on this platform.");
        }

        return new DefaultTreeModel(rootNode);
    }

    void jTreeDisk_valueChanged(TreeSelectionEvent e) {
        selectedTreeNode = (MyTreeNode)
                jTreeDisk.getLastSelectedPathComponent();

        selectedFile = null;

        // Refresh the address field.
        if (selectedTreeNode != null) {
            File selectedDir = (File) selectedTreeNode.getUserObject();

            // Update the address text field and status bar.
            updateStatusInfo();
        }

        // Refresh the file table.
        tableModel.setColumnNames();
        tableModel.setTableData();
        jTable.repaint();       

        // Revalidate the JScrollPane component for the changed JTable.
        // Display the scrollbar if necessary.
        tableScrollPane.revalidate();         
    }

    void jTreeDisk_treeExpanded(TreeExpansionEvent e) {
        DefaultTreeModel treeModel = (DefaultTreeModel) jTreeDisk.getModel();
        TreePath newPath = new TreePath(treeModel.getPathToRoot(selectedTreeNode));

        jTreeDisk.setSelectionPath(newPath);
        jTreeDisk.scrollPathToVisible(newPath);
    }

    void jTreeDisk_mouseClicked(MouseEvent e) {
        // Enable both left click and right click selection. Left click selection is
        // auto-enabled, and doesn't need to be enabled specifically.
        TreePath curTreePath = jTreeDisk.getClosestPathForLocation(e.getX(),
                e.getY());

        jTreeDisk.clearSelection();
        jTreeDisk.addSelectionPath(curTreePath);
    }

    void jTreeDisk_treeWillExpand(TreeExpansionEvent e) throws
            ExpandVetoException {

        TreePath path = e.getPath();
        MyTreeNode selectedNode = (MyTreeNode) path.getLastPathComponent();

        if (!selectedNode.isExplored()) {
            selectedNode.explore();
        }
    }

    /**
     * Explores the directory specified by the parent tree node in the left tree
     * and the selected subdirectory in the right table.
     */
    private void exploreDirectory(MyTreeNode parentTreeNode,
            File selectedSubDir) {
        if (!parentTreeNode.isExplored()) {
            parentTreeNode.explore();
        }

        int count = jTreeDisk.getModel().getChildCount(parentTreeNode);

⌨️ 快捷键说明

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