RowSorter provides the basis for sorting and filtering.
Beyond creating and installing a
RowSorter, you very rarely
need to interact with one directly. Refer to
TableRowSorter for a concrete
implementation of
RowSorter for
JTable.
RowSorter's primary role is to provide a mapping between
two coordinate systems: that of the view (for example a
JTable) and that of the underlying data source, typically a
model.
The view invokes the following methods on the RowSorter:
toggleSortOrder The view invokes this when the
appropriate user gesture has occurred to trigger a sort. For example,
the user clicked a column header in a table.
- One of the model change methods The view invokes a model
change method when the underlying model
has changed. There may be order dependencies in how the events are
delivered, so a
RowSorter should not update its mapping
until one of these methods is invoked.
Because the view makes extensive use of the
convertRowIndexToModel,
convertRowIndexToView and
getViewRowCount methods,
these methods need to be fast.
RowSorter provides notification of changes by way of
RowSorterListener. Two types of notification are sent:
RowSorterEvent.Type.SORT_ORDER_CHANGED notifies
listeners that the sort order has changed. This is typically followed
by a notification that the sort has changed.
RowSorterEvent.Type.SORTED notifies listeners that
the mapping maintained by the RowSorter has changed in
some way.
RowSorter implementations typically don't have a one-to-one
mapping with the underlying model, but they can.
For example, if a database does the sorting,
toggleSortOrder might call through to the database
(on a background thread), and override the mapping methods to return the
argument that is passed in.
Concrete implementations of RowSorter
need to reference a model such as TableModel or
ListModel. The view classes, such as
JTable and JList, will also have a
reference to the model. To avoid ordering dependencies,
RowSorter implementations should not install a
listener on the model. Instead the view class will call into the
RowSorter when the model changes. For
example, if a row is updated in a TableModel
JTable invokes rowsUpdated.
When the model changes, the view may call into any of the following methods:
modelStructureChanged, allRowsChanged,
rowsInserted, rowsDeleted and
rowsUpdated.