- 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
的行,执行相反的操作: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
上的Collator.getInstance()
的结果。
除了排序
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
s列,当前排序顺序以及每列是否可排序。 默认排序顺序是自然的(与模型相同),默认情况下列可排序。TableRowSorter
有一个正式的类型参数:模型的类型。 传递与您的模型完全对应的类型允许您根据您的模型进行过滤而无需进行投射。 有关此示例,请参阅RowFilter
的文档。警告:
DefaultTableModel
返回列类Object
。 因此,所有比较将使用toString
完成。 这可能是不必要的昂贵。 如果列仅包含一种类型的值,例如Integer
,则应覆盖getColumnClass
并返回相应的类
。 这将大大提高这一类的性能。- 从以下版本开始:
- 1.6
- 另请参见:
-
JTable
,RowFilter
,DefaultTableModel
,Collator
,Comparator
-
-
嵌套类汇总
-
嵌套类/接口声明在类 javax.swing.DefaultRowSorter
DefaultRowSorter.ModelWrapper<M,I>
-
嵌套类/接口声明在类 javax.swing.RowSorter
RowSorter.SortKey
-
-
构造方法摘要
构造方法 构造器 描述 TableRowSorter()
使用空模型创建TableRowSorter
。TableRowSorter(M model)
创建TableRowSorter
使用model
作为底层TableModel
。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 Comparator<?>
getComparator(int column)
返回指定列的Comparator
。TableStringConverter
getStringConverter()
返回负责将值从模型转换为字符串的对象。void
setModel(M model)
设置TableModel
为这个底层模型使用TableRowSorter
。void
setStringConverter(TableStringConverter stringConverter)
设置负责将值从模型转换为字符串的对象。protected boolean
useToString(int column)
返回在排序时进行比较之前是否将值转换为字符串。-
声明方法的类 javax.swing.DefaultRowSorter
convertRowIndexToModel, convertRowIndexToView, getMaxSortKeys, getModel, getModelWrapper, getRowFilter, getSortKeys, getSortsOnUpdates, isSortable, rowsDeleted, rowsInserted, rowsUpdated, rowsUpdated, setComparator, setMaxSortKeys, setModelWrapper, setRowFilter, setSortable, setSortKeys, setSortsOnUpdates, sort, toggleSortOrder
-
-
-
-
构造方法详细信息
-
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
则返回调用compareTo
方法的私有Comparator
。 否则返回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
无效
-
-