- java.lang.Object
-
- javax.swing.RowSorter<M>
-
- javax.swing.DefaultRowSorter<M,Integer>
-
- javax.swing.table.TableRowSorter<M>
-
- 参数类型
-
M
- 模型的类型,必须是TableModel
的实现
public class TableRowSorter<M extends TableModel> extends DefaultRowSorter<M,Integer>
RowSorter
一个实现,它使用TableModel
排序和过滤。 以下示例显示将排序添加到JTable
:TableModel myModel = createMyTableModel(); JTable table = new JTable(myModel); table.setRowSorter(new TableRowSorter(myModel));
这将执行所有布线,使得当用户执行适当的手势时,例如单击列标题,表将进行视觉分类。JTable
的基于行的方法和JTable
的选择模型参考视图而不是底层模型。 因此,有必要在两者之间进行转换。 例如,要获得myModel
的选择,您需要转换索引:int[] selection = table.getSelectedRows(); for (int i = 0; i < selection.length; i++) { selection[i] = table.convertRowIndexToModel(selection[i]); }
类似地,在JTable
根据底层模型的坐标来选择一行,JTable
:table.setRowSelectionInterval(table.convertRowIndexToView(row), table.convertRowIndexToView(row));
上一个示例假设您尚未启用过滤。 如果您启用过滤功能
convertRowIndexToView
将为视图中不可见的位置返回-1。TableRowSorter
使用Comparator
进行比较。 以下定义如何为列选择Comparator
:- 如果
Comparator
已经为列由指定setComparator
方法,使用它。 - 如果由
getColumnClass
返回的列类是String
,请使用Comparator
返回的Collator.getInstance()
。 - 如果列类实现
Comparable
,使用Comparator
调用该compareTo
方法。 - 如果指定了
TableStringConverter
,请使用它将值转换为String
s,然后使用Comparator
返回的Collator.getInstance()
。 - 否则使用
Comparator
返回的Collator.getInstance()
对结果从调用toString
上的对象。
除了排序
TableRowSorter
提供了过滤的能力。 使用setFilter
方法指定过滤器。 以下示例将仅显示包含字符串“foo”的行:TableModel myModel = createMyTableModel(); TableRowSorter sorter = new TableRowSorter(myModel); sorter.setRowFilter(RowFilter.regexFilter(".*foo.*")); JTable table = new JTable(myModel); table.setRowSorter(sorter);
如果底层模型结构发生更改(调用了
modelStructureChanged
方法),则按照列,当前排序顺序以及每列是否可排序,将以下内容重置为默认值:Comparator
。 默认排序顺序是自然的(与模型相同),列可默认排序。TableRowSorter
具有一个正式类型参数:模型的类型。 传递一个与您的模型完全对应的类型,可以根据您的模型进行过滤,而无需转换。 请参阅RowFilter
的文档以获得一个示例。警告:
DefaultTableModel
返回列类为Object
。 因此,所有比较将使用toString
。 这可能是不必要的昂贵的。 如果列只包含一种类型的值,例如Integer
,则应该覆盖getColumnClass
并返回相应的Class
。 这将大大提高这个类的性能。- 从以下版本开始:
- 1.6
- 另请参见:
-
JTable
,RowFilter
,DefaultTableModel
,Collator
,Comparator
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class javax.swing.DefaultRowSorter
DefaultRowSorter.ModelWrapper<M,I>
-
Nested classes/interfaces inherited from class javax.swing.RowSorter
RowSorter.SortKey
-
-
构造方法摘要
构造方法 Constructor 描述 TableRowSorter()
创建一个空的模型TableRowSorter
。TableRowSorter(M model)
创建TableRowSorter
使用model
作为底层的TableModel
。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 Comparator<?>
getComparator(int column)
返回指定列的Comparator
。TableStringConverter
getStringConverter()
返回负责将值从模型转换为字符串的对象。void
setModel(M model)
设置TableModel
,以作为该底层模型使用TableRowSorter
。void
setStringConverter(TableStringConverter stringConverter)
设置负责将值从模型转换为字符串的对象。protected boolean
useToString(int column)
返回在进行排序比较之前是否将该值转换为字符串。-
Methods inherited from class javax.swing.DefaultRowSorter
allRowsChanged, convertRowIndexToModel, convertRowIndexToView, getMaxSortKeys, getModel, getModelRowCount, getModelWrapper, getRowFilter, getSortKeys, getSortsOnUpdates, getViewRowCount, isSortable, modelStructureChanged, rowsDeleted, rowsInserted, rowsUpdated, rowsUpdated, setComparator, setMaxSortKeys, setModelWrapper, setRowFilter, setSortable, setSortKeys, setSortsOnUpdates, sort, toggleSortOrder
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from class javax.swing.RowSorter
addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListener
-
-
-
-
构造方法详细信息
-
TableRowSorter
public TableRowSorter()
创建一个空的模型TableRowSorter
。
-
TableRowSorter
public TableRowSorter(M model)
创建TableRowSorter
使用model
作为底层的TableModel
。- 参数
-
model
-底层TableModel
使用,null
被视为空模型
-
-
方法详细信息
-
setModel
public void setModel(M model)
设置TableModel
,以作为该底层模型使用TableRowSorter
。 可以使用值null
来设置空模型。- 参数
-
model
- 使用的基础模型,或null
-
setStringConverter
public void setStringConverter(TableStringConverter stringConverter)
设置负责将值从模型转换为字符串的对象。 如果非null
这是用来转换任何对象值,没有注册Comparator
,为字符串。- 参数
-
stringConverter
- 负责将值从模型转换为字符串的对象
-
getStringConverter
public TableStringConverter getStringConverter()
返回负责将值从模型转换为字符串的对象。- 结果
- 负责将值转换为字符串的对象。
-
getComparator
public Comparator<?> getComparator(int column)
返回指定列的Comparator
。 如果Comparator
尚未使用指定setComparator
方法的Comparator
将基于列类(被返回TableModel.getColumnClass
指定列的)。 如果列类为String
,则返回Collator.getInstance
。 如果列类实现Comparable
私人Comparator
返回调用该compareTo
方法。 否则返回Collator.getInstance
。- 重写:
-
getComparator
在DefaultRowSorter<M extends TableModel,Integer>
- 参数
-
column
-列去取Comparator
的,在底层模型而言 - 结果
-
指定列的
Comparator
- 异常
-
IndexOutOfBoundsException
- 如果列超出了底层模型的范围
-
useToString
protected boolean useToString(int column)
返回在进行排序比较之前是否将该值转换为字符串。 如果真正使用ModelWrapper.getStringValueAt
,否则将使用ModelWrapper.getValueAt
。 它是由子类,比如TableRowSorter
,兑现他们这个值ModelWrapper
实现。- 重写:
-
useToString
在DefaultRowSorter<M extends TableModel,Integer>
- 参数
-
column
- 根据底层模型测试的列的索引 - 结果
- 如果在进行排序比较之前将值转换为字符串,则为true
- 异常
-
IndexOutOfBoundsException
- 如果column
无效
-
-