Mega Code Archive

 
Categories / Java / Swing JFC
 

Show thumbnails of graphic files

/* Java Swing, 2nd Edition By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole ISBN: 0-596-00408-7 Publisher: O'Reilly  */ // MyViewChooser.java //An example that uses custom file views to show thumbnails of graphic files //rather than the regular file icon. (see ThumbnailFileView.java) // import java.awt.Component; import java.awt.Container; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.filechooser.FileView; import javax.swing.plaf.metal.MetalIconFactory; public class MyViewChooser extends JFrame {   JFrame parent;   public MyViewChooser() {     super("File View Test Frame");     setSize(350, 200);     setDefaultCloseOperation(EXIT_ON_CLOSE);     parent = this;     Container c = getContentPane();     c.setLayout(new FlowLayout());     JButton openButton = new JButton("Open");     final JLabel statusbar = new JLabel(         "Output of your selection will go here");     openButton.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent ae) {         JFileChooser chooser = new JFileChooser();         // Ok, set up our own file view for the chooser         chooser.setFileView(new ThumbNailFileView(MyViewChooser.this));         int option = chooser.showOpenDialog(parent);         if (option == JFileChooser.APPROVE_OPTION) {           statusbar.setText("You chose "               + chooser.getSelectedFile().getName());         } else {           statusbar.setText("You cancelled.");         }       }     });     c.add(openButton);     c.add(statusbar);   }   public static void main(String args[]) {     System.setProperty("swing.defaultlaf",         "javax.swing.plaf.metal.MetalLookAndFeel");     MyViewChooser vc = new MyViewChooser();     vc.setVisible(true);   } } //ThumbNailFileView.java //A simple implementation of the FileView class that provides a 16x16 image of //each GIF or JPG file for its icon. This could be SLOW for large images, as we //simply load the real image and then scale it. // class ThumbNailFileView extends FileView {   private Icon fileIcon = MetalIconFactory.getTreeLeafIcon();   private Icon folderIcon = MetalIconFactory.getTreeFolderIcon();   private Component observer;   public ThumbNailFileView(Component c) {     // We need a component around to create our icon's image     observer = c;   }   public String getDescription(File f) {     // We won't store individual descriptions, so just return the     // type description.     return getTypeDescription(f);   }   public Icon getIcon(File f) {     // Is it a folder?     if (f.isDirectory()) {       return folderIcon;     }     // Ok, it's a file, so return a custom icon if it's an image file     String name = f.getName().toLowerCase();     if (name.endsWith(".jpg") || name.endsWith(".gif")) {       return new Icon16(f.getAbsolutePath());     }     // Return the generic file icon if it's not     return fileIcon;   }   public String getName(File f) {     String name = f.getName();     return name.equals("") ? f.getPath() : name;   }   public String getTypeDescription(File f) {     String name = f.getName().toLowerCase();     if (f.isDirectory()) {       return "Folder";     }     if (name.endsWith(".jpg")) {       return "JPEG Image";     }     if (name.endsWith(".gif")) {       return "GIF Image";     }     return "Generic File";   }   public Boolean isTraversable(File f) {     // We'll mark all directories as traversable     return f.isDirectory() ? Boolean.TRUE : Boolean.FALSE;   }   public class Icon16 extends ImageIcon {     public Icon16(String f) {       super(f);       Image i = observer.createImage(16, 16);       i.getGraphics().drawImage(getImage(), 0, 0, 16, 16, observer);       setImage(i);     }     public int getIconHeight() {       return 16;     }     public int getIconWidth() {       return 16;     }     public void paintIcon(Component c, Graphics g, int x, int y) {       g.drawImage(getImage(), x, y, c);     }   } }