Belongs to following categories: Utility, ULC5.2, ULC6.1, ULC6.2,
This contribution serves two purposes. It offers a Filtered Table Model and a Sorted Table Model.
ULCXTable of the ULCSwingX project has integrated the implementation of the sorted and filtered table model and offers the corresponding API.
ITableModel tableModel = new DefaultTableModel(rows, columnNames); FilteredTableModel filteredTableModel = new FilteredTableModel(tableModel); ULCTable table = new ULCTable(filteredTableModel);
RowFilters.AndRowFilter andFilter = new RowFilters.AndRowFilter(); andFilter.add(new RowFilters.StringRowFilter(2, "hello", true)); andFilter.add(new RowFilters.SubstringRowFilter(3, "ULC", false)); filteredTableModel.setFilter(andFilter);
ITableModel tableModel = new DefaultTableModel(rows, columnNames); SortedTableModel sortedTableModel = new SortedTableModel(tableModel); FilteredTableModel filteredTableModel = new FilteredTableModel(sortedTableModel); ULCTable table = new ULCTable(filteredTableModel);
public class FilteredTableModel extends DecoratedTableModel{ private IRowFilter fFilter; public FilteredTableModel(ITableModel sourceModel) { super(sourceModel); fFilter = null; dataChanged(); } public void setFilter(IRowFilter filter) { if((fFilter == null && filter != null) || (fFilter != null && !fFilter.equals(filter))) { fFilter = filter; dataChanged(); } } … // listen to events from the underlying table model public void tableChanged(TableModelEvent event) { switch(event.getType()) { case TableModelEvent.UPDATE: handleRowsUpdated(event); break; case TableModelEvent.INSERT: handleRowsInserted(event); break; case TableModelEvent.DELETE: handleRowsDeleted(event); break; default: throw new IllegalArgumentException("Unknown event type: " + event.getType()); } } … }
ITableModel tableModel = new DefaultTableModel(rows, columnNames); SortedTableModel sortedTableModel = new SortedTableModel(tableModel); ULCTable table = new ULCTable(sortedTableModel);
SortedTableModel sortedTableModel = (SortedTableModel) table.getModel();
ULCListSelectionModel selectionModel = table.getSelectionModel();
table.getTableHeader().addActionListener(new SortTableColumnHandler(sortedTableModel, selectionModel));ITableModel tableModel = new DefaultTableModel(rows, columnNames); FilteredTableModel filteredTableModel = new FilteredTableModel(tableModel); SortedTableModel sortedTableModel = new SortedTableModel(filteredTableModel); ULCTable table = new ULCTable(sortedTableModel);
public class SortedTableModel extends DecoratedTableModel{ private TableModelRowComparator fComparator; private int[] fSortedColumns; private boolean fAscending; public SortedTableModel(ITableModel sourceModel) { this(sourceModel, new Comparator[0]); } public SortedTableModel(ITableModel sourceModel, Comparator[] comparators) { super(sourceModel); fComparator = new TableModelRowComparator(comparators); fSortedColumns = new int[0]; fAscending = true; dataChanged(); } … public void sort(int[] sortedColumns) { if(!Arrays.equals(fSortedColumns, sortedColumns)) { fSortedColumns = sortedColumns; dataChanged(); } } public void sort(boolean ascending) { if(fAscending != ascending) { fAscending = ascending; dataChanged(); } } … // listen to events from the underlying table model public void tableChanged(TableModelEvent event) { switch(event.getType()) { case TableModelEvent.UPDATE: handleRowsUpdated(event); break; case TableModelEvent.INSERT: handleRowsInserted(event); break; case TableModelEvent.DELETE: handleRowsDeleted(event); break; default: throw new IllegalArgumentException("Unknown event type: " + event.getType()); } } … }