
 
                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 SortKeys, in order.
 If two objects are equal (the Comparator for the
 column returns 0) the next SortKey is used.  If no
 SortKeys 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 occuring 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 Comparators 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: Comparators by
 column, current sort order, and whether each column is sortable. To
 find the default Comparators, see the concrete
 implementation (for example, TableRowSorter).  The default
 sort order is unsorted (the same as the model), and columns are
 sortable by default.
 
 If the underlying model structure changes (the
 modelStructureChanged method is invoked) the following
 are reset to their default values: Comparators by column,
 current sort order and whether a column is sortable.
 
 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.