EnhancedFileTester.java Source code

Java tutorial

Introduction

Here is the source code for EnhancedFileTester.java

Source

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.HashMap;

import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileView;

public class EnhancedFileTester extends JPanel {
    class AnOvalIcon implements Icon {
        Color color;

        public AnOvalIcon(Color c) {
            color = c;
        }

        public void paintIcon(Component c, Graphics g, int x, int y) {
            g.setColor(color);
            g.fillOval(x, y, getIconWidth(), getIconHeight());
        }

        public int getIconWidth() {
            return 10;
        }

        public int getIconHeight() {
            return 15;
        }
    }

    public class IconView extends FileView {
        private HashMap hash = new HashMap();

        public IconView() {
            hash.put("htm", new AnOvalIcon(Color.RED));
            hash.put("html", new AnOvalIcon(Color.GREEN));
            hash.put("java", new AnOvalIcon(Color.BLUE));
        }

        public String getName(File f) {
            String s = f.getName();
            if (s.length() == 0) {
                s = f.getAbsolutePath();
            }
            return s;
        }

        public String getDescription(File f) {
            return f.getName();
        }

        public String getTypeDescription(File f) {
            return f.getAbsolutePath();
        }

        public Icon getIcon(File f) {
            String path = f.getAbsolutePath();
            int pos = path.lastIndexOf('.');
            if ((pos >= 0) && (pos < (path.length() - 1))) {
                String ext = path.substring(pos + 1).toLowerCase();
                return (Icon) hash.get(ext);
            }
            return null;
        }

        public Boolean isTraversable(File file) {
            return (new Boolean(file.isDirectory()));
        }
    }

    public class ExtensionFilter extends FileFilter {
        private String extensions[];

        private String description;

        public ExtensionFilter(String description, String extension) {
            this(description, new String[] { extension });
        }

        public ExtensionFilter(String description, String extensions[]) {
            this.description = description;
            this.extensions = (String[]) extensions.clone();
        }

        public boolean accept(File file) {
            if (file.isDirectory()) {
                return true;
            }
            int count = extensions.length;
            String path = file.getAbsolutePath();
            for (int i = 0; i < count; i++) {
                String ext = extensions[i];
                if (path.endsWith(ext) && (path.charAt(path.length() - ext.length()) == '.')) {
                    return true;
                }
            }
            return false;
        }

        public String getDescription() {
            return (description == null ? extensions[0] : description);
        }
    }

    public EnhancedFileTester() {
        JButton jb = new JButton("Open File Viewer");
        add(jb);
        ActionListener listener = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JFileChooser chooser = new JFileChooser(".");
                FileFilter type1 = new ExtensionFilter("Java source", ".java");
                FileFilter type2 = new ExtensionFilter("Image files",
                        new String[] { ".jpg", ".gif", "jpeg", "xbm" });
                FileFilter type3 = new ExtensionFilter("HTML files", new String[] { ".htm", ".html" });
                chooser.addChoosableFileFilter(type1);
                chooser.addChoosableFileFilter(type2);
                chooser.addChoosableFileFilter(type3);
                chooser.setFileFilter(type2); // Initial filter setting
                FileView view = new IconView();
                chooser.setFileView(view);
                int status = chooser.showOpenDialog(EnhancedFileTester.this);
                if (status == JFileChooser.APPROVE_OPTION) {
                    File f = chooser.getSelectedFile();
                    System.out.println(f);
                }
            }
        };
        jb.addActionListener(listener);
    }

    public static void main(String args[]) {
        JFrame f = new JFrame("Enhanced File Example");
        JPanel j = new EnhancedFileTester();
        f.getContentPane().add(j, BorderLayout.CENTER);
        f.setSize(300, 200);
        f.show();
    }
}