Class TableSorter
- All Implemented Interfaces:
Serializable,TableModel
TableSorter registers itself as a listener to the underlying model, just as the JTable itself would. Events recieved from the model are examined, sometimes manipulated (typically widened), and then passed on to the TableSorter's listeners (typically the JTable). If a change to the model has invalidated the order of TableSorter's rows, a note of this is made and the sorter will resort the rows the next time a value is requested.
When the tableHeader property is set, either by using the setTableHeader() method or the two argument constructor, the table header may be used as a complete UI for TableSorter. The default renderer of the tableHeader is decorated with a renderer that indicates the sorting status of each column. In addition, a mouse listener is installed with the following behavior:
- Mouse-click: Clears the sorting status of all other columns and advances the sorting status of that column through three values: {NOT_SORTED, ASCENDING, DESCENDING} (then back to NOT_SORTED again).
- SHIFT-mouse-click: Clears the sorting status of all other columns and cycles the sorting status of the column through the same three values, in the opposite order: {NOT_SORTED, DESCENDING, ASCENDING}.
- CONTROL-mouse-click and CONTROL-SHIFT-mouse-click: as above except that the changes to the column do not cancel the statuses of columns that are already sorting - giving a way to initiate a compound sort.
This is a long overdue rewrite of a class of the same name that first appeared in the swing table demos in 1997.
Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name of Sun Microsystems nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- Version:
- 2.0 02/27/04
- Author:
- Philip Milne, Brendon McLean, Dan van Enckevort, Parwinder Sekhon
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classDOCUMENT ME!private static classDOCUMENT ME!private classDOCUMENT ME!private classHelper classes.private classDOCUMENT ME!private classDOCUMENT ME! -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intDOCUMENT ME!private final Map<Class, Comparator> static final Comparator<Object> DOCUMENT ME!static final intDOCUMENT ME!private static TableSorter.DirectiveDOCUMENT ME!static final Comparator<Object> DOCUMENT ME!static final Comparator<Object> This is comparator such that it also determines if the string has numbers leading the string....if it does have numbers, it sorts using the numbers alsoprivate int[]DOCUMENT ME!private final MouseListenerDOCUMENT ME!static final intDOCUMENT ME!private static final longUse serialVersionUID for interoperability.private final List<TableSorter.Directive> DOCUMENT ME!private JTableHeaderDOCUMENT ME!protected TableModelDOCUMENT ME!private final TableModelListenerDOCUMENT ME!private TableSorter.Row[]DOCUMENT ME!Fields inherited from class javax.swing.table.AbstractTableModel
listenerList -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new TableSorter object.TableSorter(TableModel tableModel) Creates a new TableSorter object.TableSorter(TableModel tableModel, JTableHeader tableHeader) Creates a new TableSorter object. -
Method Summary
Modifier and TypeMethodDescriptionprivate voidDOCUMENT ME!private voidDOCUMENT ME!getColumnClass(int column) DOCUMENT ME!intDOCUMENT ME!getColumnName(int column) DOCUMENT ME!protected Comparator<Object> getComparator(int column) Gets an appropriate comparator for sorting the particular columnprivate TableSorter.DirectivegetDirective(int column) DOCUMENT ME!protected IcongetHeaderRendererIcon(int column, int size) DOCUMENT ME!private int[]DOCUMENT ME!intTableModel interface methods.intgetSortingStatus(int column) DOCUMENT ME!DOCUMENT ME!DOCUMENT ME!getValueAt(int row, int column) DOCUMENT ME!private TableSorter.Row[]DOCUMENT ME!booleanisCellEditable(int row, int column) DOCUMENT ME!booleanDOCUMENT ME!intmodelIndex(int viewIndex) DOCUMENT ME!voidsetColumnComparator(Class type, Comparator comparator) DOCUMENT ME!voidsetSortingStatus(int column, int status) DOCUMENT ME!voidsetTableHeader(JTableHeader tableHeader) DOCUMENT ME!voidsetTableModel(TableModel tableModel) DOCUMENT ME!voidsetValueAt(Object aValue, int row, int column) DOCUMENT ME!private voidDOCUMENT ME!Methods inherited from class javax.swing.table.AbstractTableModel
addTableModelListener, findColumn, fireTableCellUpdated, fireTableChanged, fireTableDataChanged, fireTableRowsDeleted, fireTableRowsInserted, fireTableRowsUpdated, fireTableStructureChanged, getListeners, getTableModelListeners, removeTableModelListener
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDUse serialVersionUID for interoperability.- See Also:
-
DESCENDING
public static final int DESCENDINGDOCUMENT ME!- See Also:
-
NOT_SORTED
public static final int NOT_SORTEDDOCUMENT ME!- See Also:
-
ASCENDING
public static final int ASCENDINGDOCUMENT ME!- See Also:
-
EMPTY_DIRECTIVE
DOCUMENT ME! -
COMPARABLE_COMPARATOR
DOCUMENT ME! -
LEXICAL_COMPARATOR
DOCUMENT ME! -
LEXICAL_NUMS_COMPARATOR
This is comparator such that it also determines if the string has numbers leading the string....if it does have numbers, it sorts using the numbers also -
tableModel
DOCUMENT ME! -
columnComparators
-
modelToView
private int[] modelToViewDOCUMENT ME! -
mouseListener
DOCUMENT ME! -
sortingColumns
DOCUMENT ME! -
tableHeader
DOCUMENT ME! -
tableModelListener
DOCUMENT ME! -
viewToModel
DOCUMENT ME!
-
-
Constructor Details
-
TableSorter
public TableSorter()Creates a new TableSorter object. -
TableSorter
Creates a new TableSorter object.- Parameters:
tableModel- DOCUMENT ME!
-
TableSorter
Creates a new TableSorter object.- Parameters:
tableModel- DOCUMENT ME!tableHeader- DOCUMENT ME!
-
-
Method Details
-
getColumnClass
DOCUMENT ME!- Specified by:
getColumnClassin interfaceTableModel- Overrides:
getColumnClassin classAbstractTableModel- Parameters:
column- DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
getColumnCount
public int getColumnCount()DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
getColumnName
DOCUMENT ME!- Specified by:
getColumnNamein interfaceTableModel- Overrides:
getColumnNamein classAbstractTableModel- Parameters:
column- DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
getRowCount
public int getRowCount()TableModel interface methods.- Returns:
- DOCUMENT ME!
-
getSortingStatus
public int getSortingStatus(int column) DOCUMENT ME!- Parameters:
column- DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
getTableHeader
DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
getTableModel
DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
getValueAt
DOCUMENT ME!- Parameters:
row- DOCUMENT ME!column- DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
isCellEditable
public boolean isCellEditable(int row, int column) DOCUMENT ME!- Specified by:
isCellEditablein interfaceTableModel- Overrides:
isCellEditablein classAbstractTableModel- Parameters:
row- DOCUMENT ME!column- DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
isSorting
public boolean isSorting()DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
modelIndex
public int modelIndex(int viewIndex) DOCUMENT ME!- Parameters:
viewIndex- DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
setColumnComparator
DOCUMENT ME!- Parameters:
type- DOCUMENT ME!comparator- DOCUMENT ME!
-
setSortingStatus
public void setSortingStatus(int column, int status) DOCUMENT ME!- Parameters:
column- DOCUMENT ME!status- DOCUMENT ME!
-
setTableHeader
DOCUMENT ME!- Parameters:
tableHeader- DOCUMENT ME!
-
setTableModel
DOCUMENT ME!- Parameters:
tableModel- DOCUMENT ME!
-
setValueAt
DOCUMENT ME!- Specified by:
setValueAtin interfaceTableModel- Overrides:
setValueAtin classAbstractTableModel- Parameters:
aValue- DOCUMENT ME!row- DOCUMENT ME!column- DOCUMENT ME!
-
getComparator
Gets an appropriate comparator for sorting the particular column- Parameters:
column- The column to sort by fromtableModel- Returns:
- A comparator for a given column
-
getHeaderRendererIcon
DOCUMENT ME!- Parameters:
column- DOCUMENT ME!size- DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
cancelSorting
private void cancelSorting()DOCUMENT ME! -
clearSortingState
private void clearSortingState()DOCUMENT ME! -
getDirective
DOCUMENT ME!- Parameters:
column- DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
getModelToView
private int[] getModelToView()DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
getViewToModel
DOCUMENT ME!- Returns:
- DOCUMENT ME!
-
sortingStatusChanged
private void sortingStatusChanged()DOCUMENT ME!
-