java.lang.Object
javax.swing.RowSorter <男>
javax.swing.DefaultRowSorter <M,Integer >
javax.swing.table.TableRowSorter<M>
- 类型参数:
M
- 模型的类型,必须是TableModel
的实现
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
:
- 如果
setComparator
方法为该列指定了Comparator
,则使用它。 - 如果
getColumnClass
返回的列类是String
,则使用Collator.getInstance()
返回的Comparator
。 - 如果列类实现
Comparable
,请使用调用compareTo
方法的Comparator
。 - 如果已指定
TableStringConverter
,则使用它将值转换为String
s,然后使用Collator.getInstance()
返回的Comparator
。 - 否则使用
Collator.getInstance()
返回的Comparator
对对象调用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
s by column、当前排序顺序以及每列是否可排序。默认排序顺序是自然的(与模型相同),默认情况下列是可排序的。
TableRowSorter
有一个正式的类型参数:模型的类型。传入与您的模型完全对应的类型允许您根据您的模型进行过滤而无需转换。有关此示例,请参阅 RowFilter
的文档。
WARNING:DefaultTableModel
返回 Object
的列类。因此,所有比较都将使用 toString
完成。这可能是不必要的昂贵。如果该列仅包含一种类型的值,例如 Integer
,您应该覆盖 getColumnClass
并返回适当的 Class
。这将显着提高此类的性能。
- 自从:
- 1.6
- 参见:
-
内部类总结
在类 javax.swing.DefaultRowSorter 中声明的嵌套类/接口
DefaultRowSorter.ModelWrapper<M,
I> 在类 javax.swing.RowSorter 中声明的嵌套类/接口
RowSorter.SortKey
-
构造方法总结
构造方法构造方法描述使用空模型创建TableRowSorter
。TableRowSorter
(M model) 使用model
作为基础TableModel
创建一个TableRowSorter
。 -
方法总结
修饰符和类型方法描述Comparator<?>
getComparator
(int column) 返回指定列的Comparator
。返回负责将值从模型转换为字符串的对象。void
将TableModel
设置为用作此TableRowSorter
的基础模型。void
setStringConverter
(TableStringConverter stringConverter) 设置负责将值从模型转换为字符串的对象。protected boolean
useToString
(int column) 返回排序时是否在进行比较之前将值转换为字符串。在类 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
在类 javax.swing.RowSorter 中声明的方法
addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListener
-
构造方法详细信息
-
TableRowSorter
public TableRowSorter()使用空模型创建TableRowSorter
。 -
TableRowSorter
使用model
作为基础TableModel
创建一个TableRowSorter
。- 参数:
model
- 要使用的底层TableModel
,null
被视为空模型
-
-
方法详情
-
setModel
将TableModel
设置为用作此TableRowSorter
的基础模型。null
的值可用于设置空模型。- 参数:
model
- 要使用的基础模型,或null
-
setStringConverter
设置负责将值从模型转换为字符串的对象。如果非null
这用于将任何没有注册Comparator
的对象值转换为字符串。- 参数:
stringConverter
- 负责将值从模型转换为字符串的对象
-
getStringConverter
返回负责将值从模型转换为字符串的对象。- 返回:
- 负责将值转换为字符串的对象。
-
getComparator
返回指定列的Comparator
。如果未使用setComparator
方法指定Comparator
,将根据指定列的列类 (TableModel.getColumnClass
) 返回Comparator
。如果列类是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
无效
-