MyFilterChooser.java Source code

Java tutorial

Introduction

Here is the source code for MyFilterChooser.java

Source

/*
Java Swing, 2nd Edition
By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole
ISBN: 0-596-00408-7
Publisher: O'Reilly 
*/
// MyFilterChooser.java
//Just a simple example to see what it takes to make one of these filters work.
//

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.filechooser.FileFilter;

public class MyFilterChooser extends JFrame {
    public MyFilterChooser() {
        super("Filter Test Frame");
        setSize(350, 200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        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) {
                String[] pics = new String[] { "gif", "jpg", "tif" };
                String[] audios = new String[] { "au", "aiff", "wav" };
                JFileChooser chooser = new JFileChooser();
                chooser.addChoosableFileFilter(new SimpleFileFilter(pics, "Images (*.gif, *.jpg, *.tif)"));
                chooser.addChoosableFileFilter(new SimpleFileFilter(".MOV"));
                chooser.addChoosableFileFilter(new SimpleFileFilter(audios, "Sounds (*.aiff, *.au, *.wav)"));
                int option = chooser.showOpenDialog(MyFilterChooser.this);
                if (option == JFileChooser.APPROVE_OPTION) {
                    if (chooser.getSelectedFile() != null)
                        statusbar.setText("You chose " + chooser.getSelectedFile().getName());
                } else {
                    statusbar.setText("You canceled.");
                }
            }
        });

        c.add(openButton);
        c.add(statusbar);
        setVisible(true);
    }

    public static void main(String args[]) {
        MyFilterChooser mfc = new MyFilterChooser();
    }
}

//SimpleFileFilter.java
//A straightforward extension-based example of a file filter. This should be
//replaced by a "first class" Swing class in a later release of Swing.
//

class SimpleFileFilter extends FileFilter {

    String[] extensions;

    String description;

    public SimpleFileFilter(String ext) {
        this(new String[] { ext }, null);
    }

    public SimpleFileFilter(String[] exts, String descr) {
        // Clone and lowercase the extensions
        extensions = new String[exts.length];
        for (int i = exts.length - 1; i >= 0; i--) {
            extensions[i] = exts[i].toLowerCase();
        }
        // Make sure we have a valid (if simplistic) description
        description = (descr == null ? exts[0] + " files" : descr);
    }

    public boolean accept(File f) {
        // We always allow directories, regardless of their extension
        if (f.isDirectory()) {
            return true;
        }

        // Ok, it's a regular file, so check the extension
        String name = f.getName().toLowerCase();
        for (int i = extensions.length - 1; i >= 0; i--) {
            if (name.endsWith(extensions[i])) {
                return true;
            }
        }
        return false;
    }

    public String getDescription() {
        return description;
    }
}