/*
* 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);
for (int i = 0; i < count; i++) {
Object oneChild = jTreeDisk.getModel().getChild(parentTreeNode, i);
if (oneChild instanceof MyTreeNode) {
File file = (File) ((MyTreeNode) oneChild).getUserObject();
if (file.equals(selectedSubDir)) {
selectedTreeNode = (MyTreeNode) oneChild;
break;
}
}
}
TreePath newPath = new TreePath(selectedTreeNode.getPath());
if (jTreeDisk.isExpanded(newPath)) {
// if the new path is already expanded, just select it.
jTreeDisk.setSelectionPath(newPath);
jTreeDisk.scrollPathToVisible(newPath);
} else {
jTreeDisk.expandPath(newPath);
}
}
/**
* Expands the tree to the given path.
*/
private void expandPaths(JTree tree, List paths) {
Iterator iter = paths.iterator();
if (!iter.hasNext()) {
return;
}
MyTreeNode parentNode = (MyTreeNode) tree.getModel().getRoot();
if (!parentNode.isExplored()) {
parentNode.explore();
}
// ===
// For Windows "My Computer" node only.
// ===
// Ignore the root node "My Computer", since the path for this node
// is not in the path list of the expanded node.
File parentFile = (File) ((MyTreeNode) parentNode).getUserObject();
if (parentFile.equals(new File(FileExplorer.MY_COMPUTER_FOLDER_PATH))) {
int count = jTreeDisk.getModel().getChildCount(parentNode);
boolean pathNotFound = true;
for (int i = 0; i < count; i++) {
Object oneChild = jTreeDisk.getModel().getChild(parentNode, i);
String onePath = ((MyTreeNode) oneChild).toString();
if (onePath.equalsIgnoreCase((String) iter.next())) {
parentNode = (MyTreeNode) oneChild;
pathNotFound = false;
break;
}
}
} else {
if (!parentFile.equals((String) iter.next())) {
return;
}
}
boolean pathNotFound = false;
while (iter.hasNext() && !pathNotFound) {
if (!parentNode.isExplored()) {
parentNode.explore();
}
String nextPath = (String) iter.next();
pathNotFound = true;
int count = jTreeDisk.getModel().getChildCount(parentNode);
for (int i = 0; i < count; i++) {
Object oneChild = jTreeDisk.getModel().getChild(parentNode, i);
String onePath = ((MyTreeNode) oneChild).toString();
if (onePath.equalsIgnoreCase(nextPath)) {
parentNode = (MyTreeNode) oneChild;
pathNotFound = false;
break;
}
}
}
if (pathNotFound) {
return;
} else {
selectedTreeNode = parentNode;
TreePath newPath = new TreePath(selectedTreeNode.getPath());
if (jTreeDisk.isExpanded(newPath)) {
// if the new path is already expanded, just select it.
jTreeDisk.setSelectionPath(newPath);
jTreeDisk.scrollPathToVisible(newPath);
} else {
jTreeDisk.expandPath(newPath);
}
}
}
/**
* Explores the specified directory by expanding the right tree to it path,
* and display it's subdirectories and files in the right table.
*/
private void exploreDirectory(File selectedDir) {
// First parse the given directory path into separate path names/fields.
List paths = new ArrayList();
String selectedAbsPath = selectedDir.getAbsolutePath();
int beginIndex = 0;
int endIndex = selectedAbsPath.indexOf(File.separator);
// For the first path name, attach the path separator.
// For Windows, it should be like 'C:\', for Unix, it should be like '/'.
paths.add(selectedAbsPath.substring(beginIndex, endIndex + 1));
beginIndex = endIndex + 1;
endIndex = selectedAbsPath.indexOf(File.separator, beginIndex);
while (endIndex != -1) {
// For other path names, do not attach the path separator.
paths.add(selectedAbsPath.substring(beginIndex, endIndex));
beginIndex = endIndex + 1;
endIndex = selectedAbsPath.indexOf(File.separator, beginIndex);
}
String lastPath = selectedAbsPath.substring(beginIndex,
selectedAbsPath.length());
if ((lastPath != null) && (lastPath.length() != 0)) {
paths.add(lastPath);
}
expandPaths(jTreeDisk, paths);
}
/**
* Updates the status info including the address text field and status bar.
*
* It should be called in below cases:
* the selected node in the left tree changes;
* click on one item in the right file table;
* the current status changes from STATUS_FILEEXPLORER to "WebBrowse".
*/
private void updateStatusInfo() {
File selectedDir = (File) selectedTreeNode.getUserObject();
if (selectedDir.equals(new File(FileExplorer.MY_COMPUTER_FOLDER_PATH))) {
// ===
// For Windows "My Computer" node only.
// ===
if (selectedFile == null) {
jAddressTextField.setText("");
statusBar.lblObject.setText(selectedTreeNode.getChildrenCount()
+ " object(s)");
} else {
jAddressTextField.setText(selectedFile.getPath());
statusBar.lblObject.setText("1 object(s) selected");
}
statusBar.lblSize.setText("0 Bytes");
} else {
if (selectedFile == null) {
jAddressTextField.setText(selectedDir.getPath());
statusBar.lblObject.setText(selectedTreeNode.getChildrenCount()
+ " object(s)");
statusBar.lblSize.setText(MyUtility.length2KB(selectedTreeNode.getSize()));
} else {
jAddressTextField.setText(selectedFile.getPath());
statusBar.lblObject.setText("1 object(s) selected");
statusBar.lblSize.setText(MyUtility.length2KB(selectedFile.length()));
}
}
}
void jTable_maybePopUpMenu(MouseEvent e) {
if (e.isPopupTrigger() == false || selectedFile == null) {
return;
}
if (!selectedFile.isDirectory()) {
// For a selected file, all the menu items are visible.
// Check the availability of the menu items.
jDesktopPopupMenu.removeAll();
jDesktopPopupMenu.add(jMenuItemOpen);
jDesktopPopupMenu.add(jMenuItemEdit);
jDesktopPopupMenu.add(jMenuItemPrint);
jDesktopPopupMenu.addSeparator();
jDesktopPopupMenu.add(jMenuItemBrowse);
jDesktopPopupMenu.addSeparator();
jDesktopPopupMenu.add(jMenuItemMail);
if (Desktop.isEditable(selectedFile)) {
jMenuItemEdit.setEnabled(true);
} else {
jMenuItemEdit.setEnabled(false);
}
if (Desktop.isPrintable(selectedFile)) {
jMenuItemPrint.setEnabled(true);
} else {
jMenuItemPrint.setEnabled(false);
}
jDesktopPopupMenu.show((Component) jTable, e.getX(), e.getY());
} else {
// For a selected directory, only "Open", "Browse" and "Browser in New
// Window" items are visible.
jDesktopPopupMenu.removeAll();
jDesktopPopupMenu.add(jMenuItemOpen);
jDesktopPopupMenu.addSeparator();
jDesktopPopupMenu.add(jMenuItemBrowse);
jDesktopPopupMenu.show((Component) jTable, e.getX(), e.getY());
}
}
void jTable_mouseClicked(MouseEvent e) {
int curRow = jTable.rowAtPoint(new Point(e.getX(), e.getY()));
if (curRow == -1) {
selectedFile = null;
updateStatusInfo();
jTable.clearSelection();
return;
}
if (SwingUtilities.isRightMouseButton(e)) {
// Enable right click selection. Left click selection is auto-enabled,
// and doesn't need to be enabled specifically.
curRow = jTable.rowAtPoint(new Point(e.getX(), e.getY()));
jTable.clearSelection();
jTable.addRowSelectionInterval(curRow, curRow);
}
ListSelectionModel lsm = jTable.getSelectionModel();
int selectedRow = lsm.getMinSelectionIndex();
DiskObject selectedObject = (DiskObject) tableModel.getValueAt(selectedRow,
0);
File selectedDir = (File) selectedTreeNode.getUserObject();
if (selectedDir.equals(new File(FileExplorer.MY_COMPUTER_FOLDER_PATH))) {
// ===
// For Windows "My Computer" node only.
// ===
selectedFile = new File(selectedObject.name);
} else {
selectedFile = new File(selectedDir.toString() + File.separator
+ selectedObject.name);
}
// Update the address text field and status bar.
updateStatusInfo();
if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {
// For a left and double click, open the file or directory.
// Notice!!!. Below code is duplicate of
// void jMenuItemOpen_actionPerformed(ActionEvent e) {}
// Popup the context menu.
if (!selectedFile.isDirectory()) {
try {
Desktop.open(selectedFile);
} catch (DesktopException de) {
JOptionPane.showMessageDialog(this, de.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
} else {
// The selection is a directory, open it.
exploreDirectory(selectedTreeNode, selectedFile);
}
}
}
void jMenuItemOpen_actionPerformed(ActionEvent e) {
if (!selectedFile.isDirectory()) {
try {
Desktop.open(selectedFile);
} catch (DesktopException de) {
JOptionPane.showMessageDialog(this, de.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
} else {
// The selection is a directory, open it.
exploreDirectory(selectedTreeNode, selectedFile);
}
}
void jMenuItemEdit_actionPerformed(ActionEvent e) {
try {
Desktop.edit(selectedFile);
} catch (DesktopException de) {
JOptionPane.showMessageDialog(this, de.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
}
void jMenuItemPrint_actionPerformed(ActionEvent e) {
try {
Desktop.print(selectedFile);
} catch (DesktopException de) {
JOptionPane.showMessageDialog(this, de.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
}
void jMenuItemBrowse_actionPerformed(ActionEvent e) {
URL fileURL = null;
try {
fileURL = selectedFile.toURL();
} catch (MalformedURLException mue) {
JOptionPane.showMessageDialog(this, mue.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
try {
Desktop.browse(fileURL);
} catch (DesktopException de) {
JOptionPane.showMessageDialog(this, de.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
}
void jMenuItemMail_actionPerformed(ActionEvent e) {
Message msg = new Message();
List attachList = new ArrayList();
attachList.add(selectedFile.getPath());
try {
msg.setAttachments(attachList);
} catch (IOException ioe) {
JOptionPane.showMessageDialog(this, ioe.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
try {
Desktop.mail(msg);
} catch (DesktopException de) {
JOptionPane.showMessageDialog(this, de.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
}
void jBrowseButton_actionPerformed(ActionEvent e) {
String addrValue = jAddressTextField.getText();
String addrValueTrim;
if ((addrValue != null) && addrValue.trim() != null) {
addrValueTrim = addrValue.trim();
URL addressURL = address2URL(addrValueTrim);
if (addressURL == null) {
JOptionPane.showMessageDialog(this,
"Cannot find '" + addrValueTrim
+ "'. Make sure the path or Internet address is correct.",
"Error",
JOptionPane.ERROR_MESSAGE);
} else {
try {
Desktop.browse(addressURL);
} catch (DesktopException de) {
JOptionPane.showMessageDialog(this, de.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
}
}
}
// Return a local File object if the given address string is a local file path.
// If else, null is returned.
File address2LocalFile(String address) {
// Check if the text value is a local path by checking if it starts
// with a driver name(on Windows) or root path(on Unix).
File localFile = null;
File[] roots = MyUtility.getRoots();
for (int i = 0; i < roots.length; i++) {
if (address.toLowerCase().startsWith(roots[i].toString().toLowerCase())) {
localFile = new File(address);
break;
}
}
return localFile;
}
// Return an URL object if the given address string could be converted to
// an URL. If else, null is returned.
URL address2URL(String address) {
URL tempUrl = null;
try {
File localFile = address2LocalFile(address);
if (localFile != null) {
tempUrl = localFile.toURL();
} else {
// Check if the text value is a valid URL.
try {
tempUrl = new URL(address);
} catch (MalformedURLException e) {
if (address.toLowerCase().startsWith("ftp.")) {
tempUrl = new URL("ftp://" + address);
} else if (address.toLowerCase().startsWith("gopher.")) {
tempUrl = new URL("gopher://" + address);
} else {
tempUrl = new URL("http://" + address);
}
}
}
} catch (MalformedURLException mue) {}
return tempUrl;
}
void jAddressTextField_actionPerformed(ActionEvent e) {
String addrValue = jAddressTextField.getText();
if ((addrValue == null) || addrValue.trim() == null) {
return;
}
String addrValueTrim = addrValue.trim();
// Check if the address string is a local file path.
File localFile = address2LocalFile(addrValueTrim);
if (localFile != null) {
if (localFile.isFile()) {
// It's a local path to a file. Open it.
try {
Desktop.open(localFile);
} catch (DesktopException de) {
JOptionPane.showMessageDialog(this, de.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
} else if (localFile.isDirectory()) {
exploreDirectory(localFile);
} else {
JOptionPane.showMessageDialog(this,
"Cannot find '" + addrValue
+ "'. Make sure the path or Internet address is correct.",
"Error",
JOptionPane.ERROR_MESSAGE);
}
} else {
// Check if the address string value is a URL string.
URL tempUrl = address2URL(addrValueTrim);
if (tempUrl == null) {
JOptionPane.showMessageDialog(this,
"Cannot find '" + addrValue
+ "'. Make sure the path or Internet address is correct.",
"Error",
JOptionPane.ERROR_MESSAGE);
} else {
try {
Desktop.browse(tempUrl);
} catch (DesktopException de) {
JOptionPane.showMessageDialog(this, de.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
}
}
}
}
class FileExplorer_jTreeDisk_treeSelectionAdapter
implements javax.swing.event.TreeSelectionListener {
FileExplorer adaptee;
FileExplorer_jTreeDisk_treeSelectionAdapter(FileExplorer adaptee) {
this.adaptee = adaptee;
}
public void valueChanged(TreeSelectionEvent e) {
adaptee.jTreeDisk_valueChanged(e);
}
}
class FileExplorer_jTable_mouseAdapter extends java.awt.event.MouseAdapter {
FileExplorer adaptee;
FileExplorer_jTable_mouseAdapter(FileExplorer adaptee) {
this.adaptee = adaptee;
}
public void mouseClicked(MouseEvent e) {
adaptee.jTable_mouseClicked(e);
}
public void mousePressed(MouseEvent e) {
adaptee.jTable_maybePopUpMenu(e);
}
public void mouseReleased(MouseEvent e) {
adaptee.jTable_maybePopUpMenu(e);
}
}
class FileExplorer_jTreeDisk_treeExpansionAdapter implements javax.swing.event.TreeExpansionListener {
FileExplorer adaptee;
FileExplorer_jTreeDisk_treeExpansionAdapter(FileExplorer adaptee) {
this.adaptee = adaptee;
}
public void treeExpanded(TreeExpansionEvent e) {
adaptee.jTreeDisk_treeExpanded(e);
}
public void treeCollapsed(TreeExpansionEvent e) {}
}
class FileExplorer_jMenuItemOpen_actionAdapter implements java.awt.event.ActionListener {
FileExplorer adaptee;
FileExplorer_jMenuItemOpen_actionAdapter(FileExplorer adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuItemOpen_actionPerformed(e);
}
}
class FileExplorer_jMenuItemEdit_actionAdapter implements java.awt.event.ActionListener {
FileExplorer adaptee;
FileExplorer_jMenuItemEdit_actionAdapter(FileExplorer adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuItemEdit_actionPerformed(e);
}
}
class FileExplorer_jMenuItemPrint_actionAdapter implements java.awt.event.ActionListener {
FileExplorer adaptee;
FileExplorer_jMenuItemPrint_actionAdapter(FileExplorer adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuItemPrint_actionPerformed(e);
}
}
class FileExplorer_jMenuItemBrowse_actionAdapter implements java.awt.event.ActionListener {
FileExplorer adaptee;
FileExplorer_jMenuItemBrowse_actionAdapter(FileExplorer adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuItemBrowse_actionPerformed(e);
}
}
class FileExplorer_jMenuItemMail_actionAdapter implements java.awt.event.ActionListener {
FileExplorer adaptee;
FileExplorer_jMenuItemMail_actionAdapter(FileExplorer adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuItemMail_actionPerformed(e);
}
}
class FileExplorer_jBrowseButton_actionAdapter implements java.awt.event.ActionListener {
FileExplorer adaptee;
FileExplorer_jBrowseButton_actionAdapter(FileExplorer adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jBrowseButton_actionPerformed(e);
}
}
class FileExplorer_jTreeDisk_mouseAdapter extends java.awt.event.MouseAdapter {
FileExplorer adaptee;
FileExplorer_jTreeDisk_mouseAdapter(FileExplorer adaptee) {
this.adaptee = adaptee;
}
public void mouseClicked(MouseEvent e) {
adaptee.jTreeDisk_mouseClicked(e);
}
}
class FileExplorer_jTreeDisk_treeWillExpandAdapter implements javax.swing.event.TreeWillExpandListener {
FileExplorer adaptee;
FileExplorer_jTreeDisk_treeWillExpandAdapter(FileExplorer adaptee) {
this.adaptee = adaptee;
}
public void treeWillExpand(TreeExpansionEvent e) throws ExpandVetoException {
adaptee.jTreeDisk_treeWillExpand(e);
}
public void treeWillCollapse(TreeExpansionEvent e) {}
}
/**
* Below class is used to eliminate the grey area of the scroll pane
* that is not filled in the table.
*/
class MyTable extends JTable implements Scrollable {
public boolean getScrollableTracksViewportHeight() {
Component parent = getParent();
if (parent instanceof JViewport) {
return parent.getHeight() > getPreferredSize().height;
}
return false;
}
}
class FileExplorer_jAddressTextField_actionAdapter implements java.awt.event.ActionListener {
FileExplorer adaptee;
FileExplorer_jAddressTextField_actionAdapter(FileExplorer adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jAddressTextField_actionPerformed(e);
}
}