Listing 15.1 JFileChooser Application with Open and Save File Choosers (TJFileChooser.java) // Demonstrates the Swing file choosers import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; import java.io.*; // 1. The class TJFileChooser frame. public class TJFileChooser extends JFrame { JMenuItem openMI, saveMI, saveAsMI, exitMI; JFileChooser fileChooser; Container container; JLabel label; File file, selectedFile; public TJFileChooser() { // 2. To close the frame. this.addWindowListener(new FrameClosing()); // 3. Get a handle on the frame's content pane. container = this.getContentPane(); // 4. Create a label and add it to the container. label = new JLabel(); container.add(label); // 5. Create and add a menu bar. JMenuBar menuBar = new JMenuBar(); menuBar.setBorder(BorderFactory.createEtchedBorder()); container.add(menuBar, BorderLayout.NORTH); // 6. Create and add the file menu and its menu items. JMenu fileMenu = new JMenu("File"); menuBar.add(fileMenu); JMenuItem newMI = new JMenuItem("New"); newMI.setEnabled(false); fileMenu.add(newMI); openMI = new JMenuItem("Open"); openMI.addActionListener(new MIActionListener()); fileMenu.add(openMI); fileMenu.addSeparator(); saveMI = new JMenuItem("Save"); saveMI.setEnabled(false); fileMenu.add(saveMI); saveAsMI = new JMenuItem("Save As"); saveAsMI.addActionListener(new MIActionListener()); fileMenu.add(saveAsMI); fileMenu.addSeparator(); fileMenu.addSeparator(); // 7. "Exit" menu item with an action listener. exitMI = new JMenuItem("Exit"); exitMI.addActionListener(new MIActionListener()); fileMenu.add(exitMI); // 8. Create and add the Edit menu. JMenu editMenu = new JMenu("Edit"); menuBar.add(editMenu); } // 9. Menu action listener. class MIActionListener implements ActionListener { public void actionPerformed(ActionEvent ae) { JMenuItem menuItem = (JMenuItem) ae.getSource(); // 10. If the Open menu item is selected. if (menuItem == openMI) { if (file == null) { // Create a file chooser pointing to the // home directory fileChooser = new JFileChooser(); } else { // Create a file chooser pointing to the // specified file path fileChooser = new JFileChooser(file); } // Show the dialog box (returns the option selected). int selected = fileChooser.showOpenDialog(container); // 11. If the Open button over the file chooser is pressed. if (selected == JFileChooser.APPROVE_OPTION) { // Get the selected file file = fileChooser.getSelectedFile(); // Display the file name in the frame. label.setText("You have selected to open:"+ file.getName()); label.setHorizontalAlignment(JLabel.CENTER); return; } // 12. If the Cancel button is pressed. else if (selected == fileChooser.CANCEL_OPTION) { label.setText("You have not selected any file to open!"); label.setHorizontalAlignment(JLabel.CENTER); return; } } // 13. If the Save menu item is selected. else if (menuItem == saveAsMI) { // Here comes your file-saving code... fileChooser = new JFileChooser(); int selected = fileChooser.showSaveDialog(container); selectedFile = new File("UNTITLED"); fileChooser.setSelectedFile(selectedFile); if (selected == JFileChooser.APPROVE_OPTION) { // Get the selected file selectedFile = fileChooser.getSelectedFile(); // Display the selected file name in the frame. label.setText("You have selected to save:"+ file.getName()); label.setHorizontalAlignment(JLabel.CENTER); return; } else if (selected == fileChooser.CANCEL_OPTION) { label.setText("You have not selected any file to open!"); label.setHorizontalAlignment(JLabel.CENTER); return; } } else if (menuItem == exitMI) { System.exit(0); } } } // 14. Listener to close the frame. class FrameClosing extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } // 15. The main method. public static void main(String[] args) { TJFileChooser frame = new TJFileChooser(); frame.setTitle("TJFileChooser Example"); frame.setSize(450, 300); frame.setVisible(true); } } Listing 15.2 JFileFilter with File Filters and Custom File View (TJFileFilter.java) Demonstrates the file filters and custom file view. import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class TFileFilter extends JFrame { JMenuItem openMI, exitMI; JFileChooser fileChooser; Container container; JLabel label; File file, selectedFile; public TFileFilter() { // 1. To close the frame. this.addWindowListener(new FrameClosing()); // 2. Get a handle on the frame's content pane. container = this.getContentPane(); // 3. create a label and add it to the container. label = new JLabel(); container.add(label); // 4. Create and add a menu bar. JMenuBar menuBar = new JMenuBar(); menuBar.setBorder(BorderFactory.createEtchedBorder()); container.add(menuBar, BorderLayout.NORTH); // 5. Create and add the file menu and its menu items. JMenu fileMenu = new JMenu("File"); menuBar.add(fileMenu); openMI = new JMenuItem("Open"); openMI.addActionListener(new MIActionListener()); fileMenu.add(openMI); fileMenu.addSeparator(); // 6. "Exit" menu item with an action listener. exitMI = new JMenuItem("Exit"); exitMI.addActionListener(new MIActionListener()); fileMenu.add(exitMI); } // 7. Menu action listener. class MIActionListener implements ActionListener { public void actionPerformed(ActionEvent ae) { JMenuItem menuItem = (JMenuItem) ae.getSource(); // 8. if the "Open" menu item is selected. if (menuItem == openMI) { if (file == null) { // Create a file chooser pionting to the // home directory. fileChooser = new JFileChooser(); } else { // Create a file chooser pointing to the // specified file path. fileChooser = new JFileChooser(file); } // 9. Add a file filter (object of MyFileFilter). fileChooser.addChoosableFileFilter(new MyFileFilter()); // The following statement will assign the new filter // discarding the other filters. //fileChooser.setFileFilter(new MyFileFilter()); // 10. Set a custom view for the files (using the object of MyFileView). fileChooser.setFileView(new MyFileView()); // 11. Show the dialog box (returns the option selected). int selected = fileChooser.showOpenDialog(container); // 12. if the Open button over the file chooser is pressed. if (selected == JFileChooser.APPROVE_OPTION) { // Get the selected file file = fileChooser.getSelectedFile(); // Display the file name in the frame. label.setText("You have selected to open:"+ file.getName()); label.setHorizontalAlignment(JLabel.CENTER); return; } // 13. if the Cancel button is pressed. else if (selected == fileChooser.CANCEL_OPTION) { label.setText("You have not selected any file to open!"); label.setHorizontalAlignment(JLabel.CENTER); return; } } // 14. If the Exit button is pressed. else if (menuItem == exitMI) { System.exit(0); } } } // 15. Listener to close the frame. class FrameClosing extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } // 16. The main method. public static void main(String[] args) { TFileFilter frame = new TFileFilter(); frame.setTitle("TFileFilter Example"); frame.setSize(450, 300); frame.setVisible(true); } } // 17. Define a file filter class. class MyFileFilter extends javax.swing.filechooser.FileFilter { public boolean accept(File file) { if (file.isDirectory()) { // Accept if the file system member is a directory return true; } // Retrieve the file name. String fileName = file.getName(); // Note the index of '.' in a file name int periodIndex = fileName.lastIndexOf('.'); // State of acceptence. boolean accepted = false; if (periodIndex>0 && periodIndex 0 && periodIndex < fileName.length() - 1) { extension = fileName.substring(periodIndex+1).toLowerCase(); } return extension; } } Listing 15.3 JColorChooser in a Simple Drawing Applet (TJColorChooser.java) /* * * */ import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TJColorChooser extends JApplet { Container container = null; DrawingPanel panel = null; JColorChooser colorChooser = null; JDialog dialog = null; int oldX, oldY, newX, newY; Color color = null; public void init() { // 1. Get a handle on the applet's content pane. container = this.getContentPane(); // 2. Create a drawing panel and add it at the center // of the content pane of the applet. panel = new DrawingPanel(); container.add(panel); // 3. Add a button at the bottom portion // of the applet to display the color chooser pane. JButton showButton = new JButton("Show Color Chooser"); showButton.addActionListener(new ButtonListener()); Box hBox = Box.createHorizontalBox(); hBox.add(Box.createHorizontalGlue()); hBox.add(showButton); hBox.add(Box.createHorizontalGlue()); container.add(hBox, BorderLayout.SOUTH); // 4. Create a color chooser object and a dialog box // that displays the color chooser. colorChooser = new JColorChooser(); dialog = JColorChooser.createDialog( container, "Color Chooser", false, colorChooser, new ButtonListener(), new ButtonListener()); } // 5. This is where you perform your drawing with // the selected color. class DrawingPanel extends Panel { public DrawingPanel () { setBackground(Color.white); MyMouseListener mouseListener = new MyMouseListener(); addMouseListener(mouseListener); addMouseMotionListener(mouseListener); } public void update(Graphics g) { g.setColor(color); paint(g); } public void paint(Graphics g) { g.drawLine(oldX, oldY, newX, newY); } } // 6. Listener class that responds to all button actions. class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { JButton button = (JButton) e.getSource(); if (button.getText().equals("Show Color Chooser")) { dialog.show(); } if (button.getText().equals("OK")) { //dialog.show(); color = colorChooser.getColor(); } else if(button.getText().equals("Cancel")) { dialog.dispose(); } // Note: Don't have to handle the actions of the // 'Reset' button; this button has been implemented // to reset the color to the previously used color. } } // 7. Mouse listener class to draw on the canvas. class MyMouseListener extends MouseAdapter implements MouseMotionListener { public void mousePressed(MouseEvent e) { oldX = e.getX(); oldY = e.getY(); newX = e.getX(); newY = e.getY(); panel.repaint(); } public void mouseDragged(MouseEvent e) { oldX = newX; oldY = newY; newX = e.getX(); newY = e.getY(); panel.repaint(); } public void mouseMoved(MouseEvent e) {} } }