TableModel
RowSorter that provides sorting
and filtering using a TableModel.
The following example shows adding sorting to a JTable:
TableModel myModel = createMyTableModel(); JTable table = new JTable(myModel); table.setRowSorter(new TableRowSorter(myModel));This will do all the wiring such that when the user does the appropriate gesture, such as clicking on the column header, the table will visually sort.
JTable's row-based methods and JTable's
selection model refer to the view and not the underlying
model. Therefore, it is necessary to convert between the two. For
example, to get the selection in terms of myModel
you need to convert the indices:
int[] selection = table.getSelectedRows();
for (int i = 0; i < selection.length; i++) {
selection[i] = table.convertRowIndexToModel(selection[i]);
}
Similarly to select a row in JTable based on
a coordinate from the underlying model do the inverse:
table.setRowSelectionInterval(table.convertRowIndexToView(row),
table.convertRowIndexToView(row));
The previous example assumes you have not enabled filtering. If you
have enabled filtering convertRowIndexToView will return
-1 for locations that are not visible in the view.
TableRowSorter uses Comparators for doing
comparisons. The following defines how a Comparator is
chosen for a column:
Comparator has been specified for the column by the
setComparator method, use it.
getColumnClass is
String, use the Comparator returned by
Collator.getInstance().
Comparable, use a
Comparator that invokes the compareTo
method.
TableStringConverter has been specified, use it
to convert the values to Strings and then use the
Comparator returned by Collator.getInstance().
Comparator returned by
Collator.getInstance() on the results from
calling toString on the objects.
In addition to sorting TableRowSorter provides the ability
to filter. A filter is specified using the setFilter
method. The following example will only show rows containing the string
"foo":
TableModel myModel = createMyTableModel();
TableRowSorter sorter = new TableRowSorter(myModel);
sorter.setRowFilter(RowFilter.regexFilter(".*foo.*"));
JTable table = new JTable(myModel);
table.setRowSorter(sorter);
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. The default
sort order is natural (the same as the model), and columns are
sortable by default.
TableRowSorter has one formal type parameter: the type
of the model. Passing in a type that corresponds exactly to your
model allows you to filter based on your model without casting.
Refer to the documentation of RowFilter for an example
of this.
Warning
DefaultTableModel returns a column
class of Object. As such all comparisons will
be done using toString. This may be unnecessarily
expensive. If the column only contains one type of value, such as
an Integer, you should override getColumnClass and
return the appropriate Class. This will dramatically
increase the performance of this class.
javax.swing.JTable , javax.swing.RowFilter , javax.swing.table.DefaultTableModel , java.text.Collator , java.util.Comparator
| Modifier and Type | Class and Description |
|---|---|
| private static class | |
| private class | TableRowSorter.
Implementation of DefaultRowSorter.ModelWrapper that delegates to a TableModel. |
| Modifier and Type | Field and Description |
|---|---|
| private static final Comparator | COMPARABLE_COMPARATOR
Comparator that uses compareTo on the contents. |
| private TableStringConverter | stringConverter
For toString conversions. |
| private M | tableModel
Underlying model. |
| Access | Constructor and Description |
|---|---|
| public | |
| public | TableRowSorter(M
the underlying model)TableModel to use,
null is treated as an empty modelCreates a |
| Modifier and Type | Method and Description |
|---|---|
| public Comparator | getComparator(int column)
Overrides javax. Returns the |
| public TableStringConverter | Returns: object responsible for converting values to strings.Returns the object responsible for converting values from the model to strings. |
| public void | setModel(M
the underlying model to use, or model)nullSets the |
| public void | setStringConverter(TableStringConverter
the object responsible for converting values
from the model to strings stringConverter)Sets the object responsible for converting values from the model to strings. |
| protected boolean | useToString(int column)
Overrides javax. Returns whether or not to convert the value to a string before doing comparisons when sorting. |
| COMPARABLE_COMPARATOR | back to summary |
|---|---|
| private static final Comparator<?> COMPARABLE_COMPARATOR Comparator that uses compareTo on the contents. | |
| stringConverter | back to summary |
|---|---|
| private TableStringConverter stringConverter For toString conversions. | |
| tableModel | back to summary |
|---|---|
| private M tableModel Underlying model. | |
| TableRowSorter | back to summary |
|---|---|
| public TableRowSorter() Creates a | |
| TableRowSorter | back to summary |
|---|---|
| public TableRowSorter(M model) Creates a
| |
| getComparator | back to summary |
|---|---|
| public Comparator Overrides javax. Returns the
| |
| getStringConverter | back to summary |
|---|---|
| public TableStringConverter getStringConverter() Returns the object responsible for converting values from the model to strings.
| |
| setModel | back to summary |
|---|---|
| public void setModel(M model) Sets the
| |
| setStringConverter | back to summary |
|---|---|
| public void setStringConverter(TableStringConverter stringConverter) Sets the object responsible for converting values from the
model to strings. If non-
| |
| useToString | back to summary |
|---|---|
| protected boolean useToString(int column) Overrides javax. Doc from javax. Returns whether or not to convert the value to a string before
doing comparisons when sorting. If true
| |
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| public int | compare(Object o1, Object o2)
Implements java. Compares its two arguments for order. |
| ComparableComparator | back to summary |
|---|---|
| private ComparableComparator() | |
| compare | back to summary |
|---|---|
| public int compare(Object o1, Object o2) Implements java. Doc from java. Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
The implementor must ensure that
The implementor must also ensure that the relation is transitive:
Finally, the implementor must ensure that
| |
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| public int | getColumnCount()
Implements abstract javax. Returns the number of columns in the model. |
| public Integer | getIdentifier(int index)
Implements abstract javax. Returns the identifier for the specified row. |
| public M | getModel()
Implements abstract javax. Returns the underlying model that this |
| public int | getRowCount()
Implements abstract javax. Returns the number of rows in the model. |
| public String | getStringValueAt(int row, int column)
Overrides javax. Returns the value as a |
| public Object | getValueAt(int row, int column)
Implements abstract javax. Returns the value at the specified index. |
| TableRowSorterModelWrapper | back to summary |
|---|---|
| private TableRowSorterModelWrapper() | |
| getColumnCount | back to summary |
|---|---|
| public int getColumnCount() Implements abstract javax. Doc from javax. Returns the number of columns in the model. | |
| getIdentifier | back to summary |
|---|---|
| public Integer getIdentifier(int index) Implements abstract javax. Doc from javax. Returns the identifier for the specified row. The return value
of this is used as the identifier for the
| |
| getModel | back to summary |
|---|---|
| public M getModel() Implements abstract javax. Doc from javax. Returns the underlying model that this | |
| getRowCount | back to summary |
|---|---|
| public int getRowCount() Implements abstract javax. Doc from javax. Returns the number of rows in the model. | |
| getStringValueAt | back to summary |
|---|---|
| public String getStringValueAt(int row, int column) Overrides javax. Doc from javax. Returns the value as a | |
| getValueAt | back to summary |
|---|---|
| public Object getValueAt(int row, int column) Implements abstract javax. Doc from javax. Returns the value at the specified index. | |