A file view that displays an icon for all files that match a file filter : File Chooser « Swing JFC « Java






A file view that displays an icon for all files that match a file filter

A file view that displays an icon for all files that match a file filter
  
/*
   This program is a part of the companion code for Core Java 8th ed.
   (http://horstmann.com/corejava)

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
*/

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;

import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileView;

/**
 * @version 1.23 2007-06-12
 * @author Cay Horstmann
 */
public class FileChooserTest
{
   public static void main(String[] args)
   {
      EventQueue.invokeLater(new Runnable()
         {
            public void run()
            {
               ImageViewerFrame frame = new ImageViewerFrame();
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            }
         });
   }
}

/**
 * A frame that has a menu for loading an image and a display area for the loaded image.
 */
class ImageViewerFrame extends JFrame
{
   public ImageViewerFrame()
   {
      setTitle("FileChooserTest");
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

      // set up menu bar
      JMenuBar menuBar = new JMenuBar();
      setJMenuBar(menuBar);

      JMenu menu = new JMenu("File");
      menuBar.add(menu);

      JMenuItem openItem = new JMenuItem("Open");
      menu.add(openItem);
      openItem.addActionListener(new FileOpenListener());

      JMenuItem exitItem = new JMenuItem("Exit");
      menu.add(exitItem);
      exitItem.addActionListener(new ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               System.exit(0);
            }
         });

      // use a label to display the images
      label = new JLabel();
      add(label);

      // set up file chooser
      chooser = new JFileChooser();

      // accept all image files ending with .jpg, .jpeg, .gif
      /*
      final ExtensionFileFilter filter = new ExtensionFileFilter();
      filter.addExtension("jpg");
      filter.addExtension("jpeg");
      filter.addExtension("gif");
      filter.setDescription("Image files");
      */
      FileNameExtensionFilter filter = new FileNameExtensionFilter("Image files", "jpg", "jpeg", "gif");
      chooser.setFileFilter(filter);

      chooser.setAccessory(new ImagePreviewer(chooser));

      chooser.setFileView(new FileIconView(filter, new ImageIcon("palette.gif")));
   }

   /**
    * This is the listener for the File->Open menu item.
    */
   private class FileOpenListener implements ActionListener
   {
      public void actionPerformed(ActionEvent event)
      {
         chooser.setCurrentDirectory(new File("."));

         // show file chooser dialog
         int result = chooser.showOpenDialog(ImageViewerFrame.this);

         // if image file accepted, set it as icon of the label
         if (result == JFileChooser.APPROVE_OPTION)
         {
            String name = chooser.getSelectedFile().getPath();
            label.setIcon(new ImageIcon(name));
         }
      }
   }

   public static final int DEFAULT_WIDTH = 300;
   public static final int DEFAULT_HEIGHT = 400;

   private JLabel label;
   private JFileChooser chooser;
}

/**
 * A file view that displays an icon for all files that match a file filter.
 */
class FileIconView extends FileView
{
   /**
    * Constructs a FileIconView.
    * @param aFilter a file filter--all files that this filter accepts will be shown with the icon.
    * @param anIcon--the icon shown with all accepted files.
    */
   public FileIconView(FileFilter aFilter, Icon anIcon)
   {
      filter = aFilter;
      icon = anIcon;
   }

   public Icon getIcon(File f)
   {
      if (!f.isDirectory() && filter.accept(f)) return icon;
      else return null;
   }

   private FileFilter filter;
   private Icon icon;
}

/**
 * A file chooser accessory that previews images.
 */
class ImagePreviewer extends JLabel
{
   /**
    * Constructs an ImagePreviewer.
    * @param chooser the file chooser whose property changes trigger an image change in this
    * previewer
    */
   public ImagePreviewer(JFileChooser chooser)
   {
      setPreferredSize(new Dimension(100, 100));
      setBorder(BorderFactory.createEtchedBorder());

      chooser.addPropertyChangeListener(new PropertyChangeListener()
         {
            public void propertyChange(PropertyChangeEvent event)
            {
               if (event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)
               {
                  // the user has selected a new file
                  File f = (File) event.getNewValue();
                  if (f == null)
                  {
                     setIcon(null);
                     return;
                  }

                  // read the image into an icon
                  ImageIcon icon = new ImageIcon(f.getPath());

                  // if the icon is too large to fit, scale it
                  if (icon.getIconWidth() > getWidth()) icon = new ImageIcon(icon.getImage()
                        .getScaledInstance(getWidth(), -1, Image.SCALE_DEFAULT));

                  setIcon(icon);
               }
            }
         });
   }
}

   
    
  








Related examples in the same category

1.JFileChooser is a standard dialog for selecting a file from the file system.
2.A demo which makes extensive use of the file chooserA demo which makes extensive use of the file chooser
3.Demonstration of File dialog boxesDemonstration of File dialog boxes
4.JFileChooser class in action with an accessoryJFileChooser class in action with an accessory
5.A simple file chooser to see what it takes to make one of these workA simple file chooser to see what it takes to make one of these work
6.see what it takes to make one of these filters worksee what it takes to make one of these filters work
7.show thumbnails of graphic filesshow thumbnails of graphic files
8.FileChooser file filter customized filechooserFileChooser file filter customized filechooser
9.Choose a FileChoose a File
10.Customizing a JFileChooserCustomizing a JFileChooser
11.A simple FileFilter class that works by filename extension
12.Swing File Chooser DemoSwing File Chooser Demo
13.FileChooser DemoFileChooser Demo
14.File Chooser Demo 2File Chooser Demo 2
15.File Chooser Demo 4File Chooser Demo 4
16.Getting the File-Type Icon of a File
17.Getting the Large File-Type Icon of a File
18.Listening for Approve and Cancel Events in a JFileChooser Dialog
19.String javax.swing.JFileChooser.APPROVE_SELECTION
20.void javax.swing.JFileChooser.addActionListener(ActionListener l)
21.JDialog javax.swing.JFileChooser.createDialog(Component parent)
22.void javax.swing.JFileChooser.setDialogType(int dialogType)
23.Changing the Text of the Approve Button in a JFileChooser Dialog
24.Determining If a File Is Hidden
25.Showing Hidden Files in a JFileChooser Dialog
26.Enabling Multiple Selections in a JFileChooser Dialog
27.Listening for Changes to the Selected File in a JFileChooser Dialog
28.Getting the File-Type Name of a File
29.Getting and Setting the Selected File of a JFileChooser Dialog
30.Getting and Setting the Current Directory of a JFileChooser Dialog
31.Determining If the Approve or Cancel Button Was Clicked in a JFileChooser Dialog
32.Adding a Filter to a File Chooser Dialog
33.Displaying Only Directories in a File Chooser Dialog
34.Creating a JFileChooser Dialog
35.Localize a JFileChooser
36.Select a directory with a JFileChooser
37.Disable the JFileChooser's "New folder" button
38.Validate a filename from a JFileChooser
39.extends FileView to create custom File chooser
40.Suffix FileFilter
41.Extension File Filter
42.Files filter that filters files by their suffix (or extension)
43.Generic File Filter
44.Get Directory Choice
45.Get File Choice
46.Dir File Filter extends javax.swing.filechooser.FileFilter