Search code examples
javafilterjtablerowfiltertablefilter

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?


Solution

  • 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);