Java tutorial
/* 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); } } }