import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;


public class FiltArq extends JFrame{

        JFileChooser chooser = new JFileChooser();

        public FiltArq(){

                super("Filtering Files");

                Container contentPane = getContentPane();
                JButton button = new JButton("Select a file");


                contentPane.setLayout(new FlowLayout());
                contentPane.add(button);

                button.addActionListener( new ActionListener(){
                                public void actionPerformed( ActionEvent e){
                                        String message = "CANCELED";
                                        int state = chooser.showOpenDialog(null);
                                        File file = chooser.getSelectedFile();
                                        String s = "CANCELED";

                                        if (file != null && state == JFileChooser.APPROVE_OPTION){
                                                s = "File Selected: " + file.getPath();
                                        }
                                        JOptionPane.showMessageDialog(null,s);

                                }
                });

                chooser.addChoosableFileFilter(new JavaFilter());
                chooser.setFileFilter(new TextFilter());

        }


        public static void main(String args[]){

                JFrame f = new FiltArq();
                f.setBounds(300,300,300,75);
                f.setVisible(true);

                f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
                f.addWindowListener(new WindowAdapter(){
                                public void WindowClosed(WindowEvent e){
                                        System.exit(0);
                                }
                });

        }
}


class TextFilter extends javax.swing.filechooser.FileFilter{

        public boolean accept(File f){
                boolean accept = f.isDirectory();

                if(!accept){
                        String suffix = getSuffix(f);
                        if(suffix != null)
                                accept = suffix.equals("txt");
                }

                return accept;
        }

        public String getDescription(){
                return "Text Files (*.txt)";
        }

        private String getSuffix(File f){
                String s = f.getPath(), suffix = null;
                int i = s.lastIndexOf('.');

                if(i > 0 && i < s.length() -1)
                        suffix = s.substring(i+1).toLowerCase();

                return suffix;
        }

}


class JavaFilter extends javax.swing.filechooser.FileFilter{

        public boolean accept(File f){
                boolean accept = f.isDirectory();

                if(!accept){
                        String suffix = getSuffix(f);
                        if(suffix != null)
                                accept = suffix.equals("java");
                }

                return accept;
        }

        public String getDescription(){
                return "Java fonts Files (*.java)";
        }

        private String getSuffix(File f){
                String s = f.getPath(), suffix = null;
                int i = s.lastIndexOf('.');

                if(i > 0 && i < s.length() -1)
                        suffix = s.substring(i+1).toLowerCase();

                return suffix;
        }

}




