M
- 模型的类型,它必须是TableModel的一个
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的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
了TableStringConverter,请使用它将值转换为String
,然后使用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
s,按列,当前排序顺序,以及每列是否可排序。 默认排序顺序是自然的(与模型相同),列可默认排序。
TableRowSorter
有一个正式类型参数:模型的类型。 传递一个与您的模型完全对应的类型,可以根据您的模型进行过滤,而无需投射。 请参阅RowFilter的RowFilter
,以获得一个示例。
警告: DefaultTableModel
返回一个列类为Object
。 因此,所有比较将使用toString
完成。 这可能是不必要的昂贵的。 如果列仅包含一种类型的值,例如Integer
,则应覆盖getColumnClass
并返回相应的类
。 这将大大提高这个类的性能。
JTable
, RowFilter
, DefaultTableModel
, Collator
, Comparator
DefaultRowSorter.ModelWrapper<M,I>
RowSorter.SortKey
Constructor and Description |
---|
TableRowSorter()
创建一个空的模型
TableRowSorter 。
|
TableRowSorter(M model)
创建
TableRowSorter 使用
model 作为底层
TableModel 。
|
Modifier and Type | Method and Description |
---|---|
Comparator<?> |
getComparator(int column)
返回
Comparator 指定列。
|
TableStringConverter |
getStringConverter()
返回负责将值从模型转换为字符串的对象。
|
void |
setModel(M model)
设置
TableModel 为这个底层模型使用
TableRowSorter 。
|
void |
setStringConverter(TableStringConverter stringConverter)
设置负责将值从模型转换为字符串的对象。
|
protected boolean |
useToString(int column)
返回在进行排序比较之前是否将该值转换为字符串。
|
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
addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListener
public TableRowSorter()
TableRowSorter
。
public TableRowSorter(M model)
TableRowSorter
使用
model
作为基础
TableModel
。
model
-底层
TableModel
使用,
null
被视为空模型
public void setModel(M model)
TableModel
为这个底层模型使用TableRowSorter
。
可以使用值null
设置空模型。
model
- 使用的基础模型,或
null
public void setStringConverter(TableStringConverter stringConverter)
null
这是用来转换任何对象值,没有注册Comparator
,为字符串。
stringConverter
- 负责将值从模型转换为字符串的对象
public TableStringConverter getStringConverter()
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
- 如果列超出了底层模型的范围
protected boolean useToString(int column)
ModelWrapper.getStringValueAt
将被使用,否则ModelWrapper.getValueAt
将被使用。
它是由子类,如TableRowSorter
,兑现他们这个值ModelWrapper
实现。
useToString
在
DefaultRowSorter<M extends TableModel,Integer>
column
- 根据底层模型测试的列的索引
IndexOutOfBoundsException
- 如果
column
无效