- 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,请使用它将值转换为Strings,然后使用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。TableStringConvertergetStringConverter()返回负责将值从模型转换为字符串的对象。voidsetModel(M model)设置TableModel,以作为该底层模型使用TableRowSorter。voidsetStringConverter(TableStringConverter stringConverter)设置负责将值从模型转换为字符串的对象。protected booleanuseToString(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无效
-
-