/* * 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 java.beans.*; import java.io.File; import java.io.IOException; import java.net.URL; import java.net.MalformedURLException; import java.util.List; import java.util.ArrayList; import org.jdesktop.jdic.desktop.*; /** * JDIC API demo main class. * <p> * Class <code>FileChooser</code> creates a UI interface demonstrating the * usage of the public API of <code>org.jdesktop.jdic.desktop.*</code> classes. */ public class FileChooser extends JPanel { JPanel fileAndUrlPanel = new JPanel(); JFileChooser jFileChooser = new JFileChooser(); JPanel urlPanel = new JPanel(); JPanel jVerbPanel = new JPanel(); JPanel jFileButtonPanel = new JPanel(); JPanel jUrlButtonPanel = new JPanel(); JButton jMailButton = new JButton(); JButton jPrintButton = new JButton(); JButton jEditButton = new JButton(); JButton jOpenButton = new JButton(); JButton jBrowseButton = new JButton(); // The two spaces(" ") seperate the url label and the text field. JLabel jUrlLabel = new JLabel("URL: "); JTextField jUrlTextField = new JTextField(); File selectedFile; public FileChooser() { try { 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 - FileChooser"); Container contentPane = frame.getContentPane(); contentPane.setLayout(new GridLayout(1, 1)); contentPane.add(new FileChooser()); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.pack(); frame.setVisible(true); } private void jbInit() throws Exception { jFileChooser.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0)); jFileChooser.setControlButtonsAreShown(false); jFileChooser.addPropertyChangeListener(new FileChooser_jFileChooser_propertyChangeAdapter(this)); jUrlTextField.addActionListener(new FileChooser_jUrlTextField_actionAdapter(this)); jMailButton.setEnabled(true); jMailButton.setText("Mail to ..."); jMailButton.addActionListener(new FileChooser_jCreateMailButton_actionAdapter(this)); jPrintButton.setEnabled(false); jPrintButton.setText("Print"); jPrintButton.addActionListener(new FileChooser_jPrintButton_actionAdapter(this)); jEditButton.setEnabled(false); jEditButton.setText("Edit"); jEditButton.addActionListener(new FileChooser_jEditButton_actionAdapter(this)); jOpenButton.setEnabled(false); jOpenButton.setText("Open"); jOpenButton.addActionListener(new FileChooser_jOpenButton_actionAdapter(this)); jBrowseButton.setText("Browse"); jBrowseButton.setToolTipText("Browse the given URL with system default browser"); jBrowseButton.addActionListener(new FileChooser_jBrowseButton_actionAdapter(this)); jFileButtonPanel.setLayout(new GridLayout(8, 1, 10, 10)); // Here, it aligns the top of jFileButtonPanel with the top of the file list // box in the jFileChooser. jFileButtonPanel.setBorder(BorderFactory.createEmptyBorder(42, 10, 0, 10)); jFileButtonPanel.add(jOpenButton, null); jFileButtonPanel.add(jEditButton, null); jFileButtonPanel.add(jPrintButton, null); // jFileButtonPanel.add(new JSeparator()); jFileButtonPanel.add(jMailButton, null); jUrlButtonPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); jUrlButtonPanel.setLayout(new GridLayout()); jUrlButtonPanel.add(jBrowseButton, null); jVerbPanel.setLayout(new BorderLayout()); jVerbPanel.add(jFileButtonPanel, BorderLayout.CENTER); jVerbPanel.add(jUrlButtonPanel, BorderLayout.SOUTH); urlPanel.setBorder(BorderFactory.createEmptyBorder(20, 10, 11, 0)); urlPanel.setLayout(new BorderLayout()); urlPanel.add(jUrlLabel, BorderLayout.WEST); urlPanel.add(jUrlTextField, BorderLayout.CENTER); fileAndUrlPanel.setLayout(new BorderLayout()); fileAndUrlPanel.add(jFileChooser, BorderLayout.CENTER); fileAndUrlPanel.add(urlPanel, BorderLayout.SOUTH); // JSeparator jSeparator = new JSeparator(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setPreferredSize(new Dimension(screenSize.width * 6 / 10, screenSize.height * 5 / 10)); this.setLayout(new BorderLayout()); this.add(fileAndUrlPanel, BorderLayout.CENTER); // this.add(jSeparator, BorderLayout.CENTER); this.add(jVerbPanel, BorderLayout.EAST); } void jOpenButton_actionPerformed(ActionEvent e) { try { Desktop.open(selectedFile); } catch (DesktopException de) { JOptionPane.showMessageDialog(this, "Exception: " + de.toString(), "Error message", JOptionPane.ERROR_MESSAGE); } } void jBrowseButton_actionPerformed(ActionEvent e) { String inputUrl = jUrlTextField.getText(); if (inputUrl == null) { return; } try { Desktop.browse(new URL(inputUrl)); } catch (MalformedURLException de) { JOptionPane.showMessageDialog(this, "Invalid URL: " + inputUrl, "Exception", JOptionPane.ERROR_MESSAGE); } catch (DesktopException de) { JOptionPane.showMessageDialog(this, de.toString(), "Exception", JOptionPane.ERROR_MESSAGE); } } void jEditButton_actionPerformed(ActionEvent e) { try { Desktop.edit(selectedFile); } catch (DesktopException de) { JOptionPane.showMessageDialog(this, de.toString(), "Exception", JOptionPane.ERROR_MESSAGE); } } void jPrintButton_actionPerformed(ActionEvent e) { try { Desktop.print(selectedFile); } catch (DesktopException de) { JOptionPane.showMessageDialog(this, de.toString(), "Exception", JOptionPane.ERROR_MESSAGE); } } void jCreateMailButton_actionPerformed(ActionEvent e) { if (selectedFile == null) { // No selected file as attachment, just launch the system mailer. try { Desktop.mail(); } catch (DesktopException de) { JOptionPane.showMessageDialog(this, de.toString(), "Exception", JOptionPane.ERROR_MESSAGE); } } else { // Has selected file as attachment, construct a message specifing the // attachment and launch the system mailer. Message msg = new Message(); List attachList = new ArrayList(); attachList.add(selectedFile.toString()); // attachList.add(selectedFile); try { msg.setAttachments(attachList); } catch (IOException ioe) { JOptionPane.showMessageDialog(this, ioe.toString(), "Exception", JOptionPane.ERROR_MESSAGE); } try { Desktop.mail(msg); } catch (DesktopException de) { JOptionPane.showMessageDialog(this, de.toString(), "Exception", JOptionPane.ERROR_MESSAGE); } } } void jFileChooser_propertyChange(PropertyChangeEvent e) { if(JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(e.getPropertyName())){ jOpenButton.setEnabled(false); jEditButton.setEnabled(false); jPrintButton.setEnabled(false); }else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(e.getPropertyName())) { // The selected file should always be the same as newFile selectedFile = jFileChooser.getSelectedFile(); if (selectedFile != null) { // A file is selected, enable button "Open". jOpenButton.setEnabled(true); // To check that whether "Edit" and "Print" buttons should be enabled. if (Desktop.isEditable(selectedFile)) { jEditButton.setEnabled(true); } else { jEditButton.setEnabled(false); } if (Desktop.isPrintable(selectedFile)) { jPrintButton.setEnabled(true); } else { jPrintButton.setEnabled(false); } } else { // A directory is selected, then disable buttons // "Open", "Edit" and "Print". jOpenButton.setEnabled(false); jEditButton.setEnabled(false); jPrintButton.setEnabled(false); } } } void jUrlTextField_actionPerformed(ActionEvent e) { String inputUrl = jUrlTextField.getText(); if (inputUrl == null) { return; } try { Desktop.browse(new URL(inputUrl)); } catch (MalformedURLException de) { JOptionPane.showMessageDialog(this, "Invalid URL: " + inputUrl, "Exception", JOptionPane.ERROR_MESSAGE); } catch (DesktopException de) { JOptionPane.showMessageDialog(this, de.toString(), "Exception", JOptionPane.ERROR_MESSAGE); } } } class FileChooser_jOpenButton_actionAdapter implements java.awt.event.ActionListener { FileChooser adaptee; FileChooser_jOpenButton_actionAdapter(FileChooser adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jOpenButton_actionPerformed(e); } } class FileChooser_jBrowseButton_actionAdapter implements java.awt.event.ActionListener { FileChooser adaptee; FileChooser_jBrowseButton_actionAdapter(FileChooser adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jBrowseButton_actionPerformed(e); } } class FileChooser_jEditButton_actionAdapter implements java.awt.event.ActionListener { FileChooser adaptee; FileChooser_jEditButton_actionAdapter(FileChooser adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jEditButton_actionPerformed(e); } } class FileChooser_jPrintButton_actionAdapter implements java.awt.event.ActionListener { FileChooser adaptee; FileChooser_jPrintButton_actionAdapter(FileChooser adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jPrintButton_actionPerformed(e); } } class FileChooser_jCreateMailButton_actionAdapter implements java.awt.event.ActionListener { FileChooser adaptee; FileChooser_jCreateMailButton_actionAdapter(FileChooser adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jCreateMailButton_actionPerformed(e); } } class FileChooser_jFileChooser_propertyChangeAdapter implements java.beans.PropertyChangeListener { FileChooser adaptee; FileChooser_jFileChooser_propertyChangeAdapter(FileChooser adaptee) { this.adaptee = adaptee; } public void propertyChange(PropertyChangeEvent e) { adaptee.jFileChooser_propertyChange(e); } } class FileChooser_jUrlTextField_actionAdapter implements java.awt.event.ActionListener { FileChooser adaptee; FileChooser_jUrlTextField_actionAdapter(FileChooser adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jUrlTextField_actionPerformed(e); } }