📄 fileexplorer.java
字号:
/* * 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.BorderLayout;import java.awt.GridLayout;import java.awt.Dimension;import java.awt.Color;import java.awt.Point;import java.awt.Container;import java.awt.Component;import java.awt.Toolkit;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()) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -