This documentation differs from the official API. Jadeite adds extra features to the API including: variable font sizes, constructions examples, placeholders for classes and methods, and auto-generated “See Also” links. Additionally it is missing some items found in standard Javadoc documentation, including: generics type information, “Deprecated” tags and comments, “See Also” links, along with other minor differences. Please send any questions or feedback to bam@cs.cmu.edu.


javax.swing
class DefaultRowSorter

java.lang.Object extended by javax.swing.RowSorter extended by javax.swing.DefaultRowSorter
Direct Known Subclasses:
TableRowSorter

public abstract class DefaultRowSorter
extends RowSorter

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 {@link javax.swing.table.TableRowSorter 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, {@link javax.swing.table.TableRowSorter 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, {@link javax.swing.table.TableRowSorter 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 {@code setModelWrapper}. The {@code 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 {@code DefaultRowSorter} without specifying a {@code 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.


Nested Class Summary
protected abstract static class

           DefaultRowSorter.ModelWrapper is responsible for providing the data that gets sorted by DefaultRowSorter.
Nested classes/interfaces inherited from class javax.swing.RowSorter
RowSorter.SortKey
   
Constructor Summary

          Creates an empty DefaultRowSorter.
 
Method Summary
 void

          Invoked when the contents of the underlying model have completely changed.
 int

          Returns the location of index in terms of the underlying model.
 int

          Returns the location of index in terms of the view.
 Comparator
getComparator(int column)

          Returns the Comparator for the specified column.
 int

          Returns the maximum number of sort keys.
 Object

          Returns the underlying model.
 int

          Returns the number of rows in the underlying model.
protected DefaultRowSorter.ModelWrapper

          Returns the model wrapper providing the data that is being sorted and filtered.
 RowFilter

          Returns the filter that determines which rows, if any, should be hidden from view.
 List

          Returns the current sort keys.
 boolean

          Returns true if a sort should happen when the underlying model is updated; otherwise, returns false.
 int

          Returns the number of rows in the view.
 boolean
isSortable(int column)

          Returns true if the specified column is sortable; otherwise, false.
 void

          Invoked when the underlying model structure has completely changed.
 void
rowsDeleted(int firstRow, int endRow)

          Invoked when rows have been deleted from the underlying model in the specified range (inclusive).
 void
rowsInserted(int firstRow, int endRow)

          Invoked when rows have been inserted into the underlying model in the specified range (inclusive).
 void
rowsUpdated(int firstRow, int endRow)

          Invoked when rows have been changed in the underlying model between the specified range (inclusive).
 void
rowsUpdated(int firstRow, int endRow, int column)

          Invoked when rows have been changed in the underlying model between the specified range (inclusive).
 void
setComparator(int column, Comparator comparator)

          Sets the Comparator to use when sorting the specified column.
 void
setMaxSortKeys(int max)

          Sets the maximum number of sort keys.
protected void

          Sets the model wrapper providing the data that is being sorted and filtered.
 void

          Sets the filter that determines which rows, if any, should be hidden from the view.
 void
setSortable(int column, boolean sortable)

          Sets whether or not the specified column is sortable.
 void
setSortKeys(List sortKeys)

          Sets the sort keys.
 void
setSortsOnUpdates(boolean sortsOnUpdates)

          If true, specifies that a sort should happen when the underlying model is updated (rowsUpdated is invoked).
 void

          Sorts and filters the rows in the view based on the sort keys of the columns currently being sorted and the filter, if any, associated with this sorter.
 void
toggleSortOrder(int column)

          Reverses the sort order from ascending to descending (or descending to ascending) if the specified column is already the primary sorted column; otherwise, makes the specified column the primary sorted column, with an ascending sort order.
protected boolean
useToString(int column)

          Returns whether or not to convert the value to a string before doing comparisons when sorting.
 
Methods inherited from class javax.swing.RowSorter
addRowSorterListener, allRowsChanged, convertRowIndexToModel, convertRowIndexToView, fireRowSorterChanged, fireSortOrderChanged, getModel, getModelRowCount, getSortKeys, getViewRowCount, modelStructureChanged, removeRowSorterListener, rowsDeleted, rowsInserted, rowsUpdated, rowsUpdated, setSortKeys, toggleSortOrder
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DefaultRowSorter

public DefaultRowSorter()
Creates an empty DefaultRowSorter.

Method Detail

allRowsChanged

public void allRowsChanged()
{@inheritDoc}

Overrides:
allRowsChanged in class RowSorter

convertRowIndexToModel

public int convertRowIndexToModel(int index)
{@inheritDoc}

Overrides:
convertRowIndexToModel in class RowSorter
Parameters:
index

convertRowIndexToView

public int convertRowIndexToView(int index)
{@inheritDoc}

Overrides:
convertRowIndexToView in class RowSorter
Parameters:
index

getComparator

public Comparator getComparator(int column)
Returns the Comparator for the specified column. This will return null if a Comparator has not been specified for the column.

Parameters:
column - the column to fetch the Comparator for, in terms of the underlying model
Returns:
the Comparator for the specified column

getMaxSortKeys

public int getMaxSortKeys()
Returns the maximum number of sort keys.

Returns:
the maximum number of sort keys

getModel

public final Object getModel()
Returns the underlying model.

Overrides:
getModel in class RowSorter
Returns:
the underlying model

getModelRowCount

public int getModelRowCount()
{@inheritDoc}

Overrides:
getModelRowCount in class RowSorter

getModelWrapper

protected final DefaultRowSorter.ModelWrapper getModelWrapper()
Returns the model wrapper providing the data that is being sorted and filtered.

Returns:
the model wrapper responsible for providing the data that gets sorted and filtered

getRowFilter

public RowFilter getRowFilter()
Returns the filter that determines which rows, if any, should be hidden from view.

Returns:
the filter

getSortKeys

public List getSortKeys()
Returns the current sort keys. This returns an unmodifiable {@code non-null List}. If you need to change the sort keys, make a copy of the returned {@code List}, mutate the copy and invoke {@code setSortKeys} with the new list.

Overrides:
getSortKeys in class RowSorter
Returns:
the current sort order

getSortsOnUpdates

public boolean getSortsOnUpdates()
Returns true if a sort should happen when the underlying model is updated; otherwise, returns false.

Returns:
whether or not to sort when the model is updated

getViewRowCount

public int getViewRowCount()
{@inheritDoc}

Overrides:
getViewRowCount in class RowSorter

isSortable

public boolean isSortable(int column)
Returns true if the specified column is sortable; otherwise, false.

Parameters:
column - the column to check sorting for, in terms of the underlying model
Returns:
true if the column is sortable

modelStructureChanged

public void modelStructureChanged()
{@inheritDoc}

Overrides:
modelStructureChanged in class RowSorter

rowsDeleted

public void rowsDeleted(int firstRow,
                        int endRow)
{@inheritDoc}

Overrides:
rowsDeleted in class RowSorter
Parameters:
firstRow
endRow

rowsInserted

public void rowsInserted(int firstRow,
                         int endRow)
{@inheritDoc}

Overrides:
rowsInserted in class RowSorter
Parameters:
firstRow
endRow

rowsUpdated

public void rowsUpdated(int firstRow,
                        int endRow)
{@inheritDoc}

Overrides:
rowsUpdated in class RowSorter
Parameters:
firstRow
endRow

rowsUpdated

public void rowsUpdated(int firstRow,
                        int endRow,
                        int column)
{@inheritDoc}

Overrides:
rowsUpdated in class RowSorter
Parameters:
firstRow
endRow
column

setComparator

public void setComparator(int column,
                          Comparator comparator)
Sets the Comparator to use when sorting the specified column. This does not trigger a sort. If you want to sort after setting the comparator you need to explicitly invoke sort.

Parameters:
column - the index of the column the Comparator is to be used for, in terms of the underlying model
comparator - the Comparator to use

setMaxSortKeys

public void setMaxSortKeys(int max)
Sets the maximum number of sort keys. The number of sort keys determines how equal values are resolved when sorting. For example, assume a table row sorter is created and setMaxSortKeys(2) is invoked on it. The user clicks the header for column 1, causing the table rows to be sorted based on the items in column 1. Next, the user clicks the header for column 2, causing the table to be sorted based on the items in column 2; if any items in column 2 are equal, then those particular rows are ordered based on the items in column 1. In this case, we say that the rows are primarily sorted on column 2, and secondarily on column 1. If the user then clicks the header for column 3, then the items are primarily sorted on column 3 and secondarily sorted on column 2. Because the maximum number of sort keys has been set to 2 with setMaxSortKeys, column 1 no longer has an effect on the order.

The maximum number of sort keys is enforced by toggleSortOrder. You can specify more sort keys by invoking setSortKeys directly and they will all be honored. However if toggleSortOrder is subsequently invoked the maximum number of sort keys will be enforced. The default value is 3.

Parameters:
max - the maximum number of sort keys

setModelWrapper

protected final void setModelWrapper(DefaultRowSorter.ModelWrapper modelWrapper)
Sets the model wrapper providing the data that is being sorted and filtered.

Parameters:
modelWrapper - the model wrapper responsible for providing the data that gets sorted and filtered

setRowFilter

public void setRowFilter(RowFilter filter)
Sets the filter that determines which rows, if any, should be hidden from the view. The filter is applied before sorting. A value of null indicates all values from the model should be included.

RowFilter's include method is passed an Entry that wraps the underlying model. The number of columns in the Entry corresponds to the number of columns in the ModelWrapper. The identifier comes from the ModelWrapper as well.

This method triggers a sort.

Parameters:
filter - the filter used to determine what entries should be included

setSortable

public void setSortable(int column,
                        boolean sortable)
Sets whether or not the specified column is sortable. The specified value is only checked when toggleSortOrder is invoked. It is still possible to sort on a column that has been marked as unsortable by directly setting the sort keys. The default is true.

Parameters:
column - the column to enable or disable sorting on, in terms of the underlying model
sortable - whether or not the specified column is sortable

setSortKeys

public void setSortKeys(List sortKeys)
Sets the sort keys. This creates a copy of the supplied {@code List}; subsequent changes to the supplied {@code List} do not effect this {@code DefaultRowSorter}. If the sort keys have changed this triggers a sort.

Overrides:
setSortKeys in class RowSorter
Parameters:
sortKeys - the new SortKeys; null is a shorthand for specifying an empty list, indicating that the view should be unsorted

setSortsOnUpdates

public void setSortsOnUpdates(boolean sortsOnUpdates)
If true, specifies that a sort should happen when the underlying model is updated (rowsUpdated is invoked). For example, if this is true and the user edits an entry the location of that item in the view may change. The default is false.

Parameters:
sortsOnUpdates - whether or not to sort on update events

sort

public void sort()
Sorts and filters the rows in the view based on the sort keys of the columns currently being sorted and the filter, if any, associated with this sorter. An empty sortKeys list indicates that the view should unsorted, the same as the model.


toggleSortOrder

public void toggleSortOrder(int column)
Reverses the sort order from ascending to descending (or descending to ascending) if the specified column is already the primary sorted column; otherwise, makes the specified column the primary sorted column, with an ascending sort order. If the specified column is not sortable, this method has no effect.

Overrides:
toggleSortOrder in class RowSorter
Parameters:
column - index of the column to make the primary sorted column, in terms of the underlying model

useToString

protected boolean useToString(int column)
Returns whether or not to convert the value to a string before doing comparisons when sorting. If true ModelWrapper.getStringValueAt will be used, otherwise ModelWrapper.getValueAt will be used. It is up to subclasses, such as TableRowSorter, to honor this value in their ModelWrapper implementation.

Parameters:
column - the index of the column to test, in terms of the underlying model


This documentation differs from the official API. Jadeite adds extra features to the API including: variable font sizes, constructions examples, placeholders for classes and methods, and auto-generated “See Also” links. Additionally it is missing some items found in standard Javadoc documentation, including: generics type information, “Deprecated” tags and comments, “See Also” links, along with other minor differences. Please send any questions or feedback to bam@cs.cmu.edu.
This page displays the Jadeite version of the documention, which is derived from the offical documentation that contains this copyright notice:
Copyright 2008 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.
The official Sun™ documentation can be found here at http://java.sun.com/javase/6/docs/api/.