user1104836
user1104836

Reputation: 205

Java RowFilter on multiple columns

I want to sort/filter a JTable on multiple columns, f.E.

Column1  Column2
   a        1
   b        2
   c        2

I want to sort this table by the Column1 = b and by the Column2 = 2.

MyTableModel model = new MyTableModel();
sorter = new TableRowSorter<MyTableModel>(model);
table = new JTable(model);
table.setRowSorter(sorter);

...

private void newFilter() {
    RowFilter<MyTableModel, Object> rf = null;
    //If current expression doesn't parse, don't update.
    try {
        rf = RowFilter.regexFilter(filterText.getText(), 0);
    } catch (java.util.regex.PatternSyntaxException e) {
        return;
    }
    sorter.setRowFilter(rf);
}

But how to sort on more than one column?

Upvotes: 1

Views: 1746

Answers (3)

Adoliu Alexandru
Adoliu Alexandru

Reputation: 11

I used 2 inputs JTextField (filterTextOras,filterTextClient), using simple RowFilter<MyTableModel, Object> if either textfields are empty and compoundRowFilter is both contain text.

protected void Filtru() {
        RowFilter<MyTableModel, Object> rfo = null;
        RowFilter<MyTableModel, Object> rfc = null;
        if(filterTextClient.getText().equals("")){
            if(filterTextOras.getText().equals("")){
                sorter.setRowFilter(null);
            } else {
                rfc = RowFilter.regexFilter(filterTextOras, 1);//column 1
                sorter.setRowFilter(rfc);
            }
        } else {
            if(filterTextOras.getText().equals("")){
                rfo = RowFilter.regexFilter(filterTextClient.getText(), 0);//column 0
                sorter.setRowFilter(rfo);
            }
            else{
                List<RowFilter<Object,Object>> filters = new ArrayList<RowFilter<Object,Object>>(2);
                filters.add(RowFilter.regexFilter(filterTextClient.getText(), 0, 0));
                filters.add(RowFilter.regexFilter(filterTextOras.getText(), 1));
                RowFilter<Object,Object> compoundRowFilter = RowFilter.andFilter(filters);
                sorter.setRowFilter(compoundRowFilter);
            }
        }
    }

Upvotes: 0

Edison Arango
Edison Arango

Reputation: 1066

Simply remove the parameter "0" from the RowFilter to sort all columns:

rf = RowFilter.regexFilter(filterText.getText());

Upvotes: 0

Natalia
Natalia

Reputation: 4532

you can create RowFilter.AndFilter and pass all filters that you need:

List<RowFilter<M, O>> listOfFilters = new ArrayList<>();
... add filters into list
RowFilter.andFilter(listOfFilters);

Upvotes: 3

Related Questions