Reputation: 205
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
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
Reputation: 1066
Simply remove the parameter "0" from the RowFilter to sort all columns:
rf = RowFilter.regexFilter(filterText.getText());
Upvotes: 0
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