How to add two filters in differente level to the same GlazedList table?
===

I have created a table which i want to filter it in two diffrente level.
first filter it with radio button on the file extention like(.jpg, .doc, the rest).
Second filter it with textField to search something inside the first filtered.

**Does any body know how to do it?**
![enter image description here][1]


  [1]: http://i.stack.imgur.com/N9D6t.png

    public class TwoLevelFilterTablePanel extends OeVubPanel {
    private static final File DirectoryEngine = new File("C:\\Users\\Public\\Pictures\\Sample Pictures");
    private JRadioButton jpg,doc,others;
    private ButtonGroup radioSet;
    private JTextField txtFilter;
    private JTable glazedTable;
    private BasicEventList<MyCode> eventList;
    private JPanel filterPanel,radioSetPanel;
    
    public TwoLevelFilterTablePanel(BasicEventList<MyCode> eventList) {
        this.eventList=eventList;
        createComponents();
        layoutComponents();
    }

    public void createComponents() {
        jpg = new JRadioButton("jpg");
        doc= new JRadioButton("doc");
        others= new JRadioButton("other");
        radioSet = new ButtonGroup();
        radioSet.add(jpg);
        radioSet.add(doc);
        radioSet.add(others);
        txtFilter = new JTextField();
        
        radioSetPanel = new JPanel();
        radioSetPanel.setLayout(new BoxLayout(radioSetPanel, BoxLayout.X_AXIS));
        radioSetPanel.add(jpg);
        radioSetPanel.add(doc);
        radioSetPanel.add(others);
        filterPanel=new JPanel();
        filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.Y_AXIS));
        filterPanel.add(radioSetPanel);
        filterPanel.add(txtFilter);

        final BarcodeMatcherEditor barcodeMatcherEditor = new BarcodeMatcherEditor(jpg,doc,others);
        final FilterList filteredRadioSet = new FilterList(eventList, barcodeMatcherEditor);

        // build a JTable
        String[] propertyNames = new String[] {"name", "size","date"};
        String[] columnLabels = new String[] {"Name", "Size","Date"};
        TableFormat tf = GlazedLists.tableFormat(MyCode.class, propertyNames, columnLabels);
        glazedTable = new JTable(new EventTableModel(filteredRadioSet, tf));
    }

    public void layoutComponents() {
        setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
        add(filterPanel);
        add(new WebScrollPane(glazedTable));
    }

    public static void main(String[] args) {
        BasicEventList<MyCode> eventList  = new BasicEventList<MyCode>();
        for(File file : DirectoryEngine.listFiles()){
            eventList.add(new MyCode(file.getName(),file.length(),new Date(file.lastModified())));
        }
        TwoLevelFilterTablePanel demo = new TwoLevelFilterTablePanel(eventList );
        JFrame frame = new JFrame();
        Container cp = frame.getContentPane();
        cp.add(demo);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setLocation(500, 500);
        frame.setVisible(true);
    }
    } 

MatcherEditor class:

    public class BarcodeMatcherEditor extends AbstractMatcherEditor implements ActionListener {
    private JRadioButton jpg,doc,others;
    public BarcodeMatcherEditor(JRadioButton jpg, JRadioButton doc, JRadioButton others) {
        this.jpg = jpg;
        this.doc=doc;
        this.others =others;
        this.jpg.addActionListener(this);
        this.doc.addActionListener(this);
        this.others.addActionListener(this);
    }

    public Component getComponent() {
        return this.jpg;
    }

    public void actionPerformed(ActionEvent e) {
        final String filter = ((JRadioButton)e.getSource()).getText();
        if (filter == null)
            this.fireMatchAll();
        else
            this.fireChanged(new BarcodeFilterMatcher(filter));
    }

    private static class BarcodeFilterMatcher implements Matcher {
        private final String filter;
        public BarcodeFilterMatcher(String filter) {
            this.filter = filter;
        }
        public boolean matches(Object item) {
            final MyCode code = (MyCode) item;
            return this.filter.equals(code.getName());
        }
    }
    }

 