📄 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.*;
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 + -