An implementation of
RowSorter
that provides sorting and filtering around a grid-based data model. 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
.
Sorting is done based on the current SortKey
s, in order. If two objects are equal (the Comparator
for the column returns 0) the next SortKey
is used. If no SortKey
s remain or the order is UNSORTED
, then the order of the rows in the model is used.
Sorting of each column is done by way of a Comparator
that you can specify using the setComparator
method. If a Comparator
has not been specified, the Comparator
returned by Collator.getInstance()
is used on the results of calling toString
on the underlying objects. The Comparator
is never passed null
. A null
value is treated as occurring before a non-null
value, and two null
values are considered equal.
If you specify a Comparator
that casts its argument to a type other than that provided by the model, a ClassCastException
will be thrown when the data is sorted.
In addition to sorting, DefaultRowSorter
provides the ability to filter rows. Filtering is done by way of a RowFilter
that is specified using the setRowFilter
method. If no filter has been specified all rows are included.
By default, rows are in unsorted order (the same as the model) and every column is sortable. The default Comparator
s are documented in the subclasses (for example, TableRowSorter
).
If the underlying model structure changes (the modelStructureChanged
method is invoked) the following are reset to their default values: Comparator
s by column, current sort order, and whether each column is sortable. To find the default Comparator
s, see the concrete implementation (for example, TableRowSorter
). The default sort order is unsorted (the same as the model), and columns are sortable by default.
DefaultRowSorter
is an abstract class. Concrete subclasses must provide access to the underlying data by invoking setModelWrapper
. The setModelWrapper
method must be invoked soon after the constructor is called, ideally from within the subclass's constructor. Undefined behavior will result if you use a DefaultRowSorter
without specifying a ModelWrapper
.
DefaultRowSorter
has two formal type parameters. The first type parameter corresponds to the class of the model, for example DefaultTableModel
. The second type parameter corresponds to the class of the identifier passed to the RowFilter
. Refer to TableRowSorter
and RowFilter
for more details on the type parameters.