javax.swing.table

接口
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));
 
此类将完成所有连线操作(wiring),从而当用户做出适当的行为(比如单击列标题)时,表将进行直观的排序。

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

  1. 如果已经通过 setComparator 方法为列指定了 Comparator,则使用它。
  2. 如果 getColumnClass 返回的列类是 String,则使用 Collator.getInstance() 返回的 Comparator
  3. 如果列类实现 Comparable,则使用调用 compareTo 方法的 Comparator
  4. 如果已经指定了 TableStringConverter,则使用它将值转换为 String,然后使用 Collator.getInstance() 返回的 Comparator
  5. 否则,先在对象上调用 toString,再对结果调用 Collator.getInstance(),使用所返回的 Comparator

除了排序操作,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

嵌套类摘要
 
从类 javax.swing.DefaultRowSorter 继承的嵌套类/接口
DefaultRowSorter.ModelWrapper<M,I>
 
从类 javax.swing.RowSorter 继承的嵌套类/接口
RowSorter.SortKey
 
构造方法摘要
TableRowSorter()
          使用空模型创建一个 TableRowSorter
TableRowSorter(M model)
          使用 model 作为底层 TableModel 创建一个 TableRowSorter
 
方法摘要
 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 继承的方法
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
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

TableRowSorter

public TableRowSorter()
使用空模型创建一个 TableRowSorter


TableRowSorter

public TableRowSorter(M model)
使用 model 作为底层 TableModel 创建一个 TableRowSorter

参数:
model - 要使用的底层 TableModelnull 被视为空模型。
方法详细信息

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。如果没有使用 setComparator 方法指定 Comparator,那么将基于指定列的列类( TableModel.getColumnClass)返回 Comparator。如果列类为 String,则返回 Collator.getInstance。如果列类实现 Comparable,则返回调用 compareTo 方法的私有 Comparator。否则,返回 Collator.getInstance

覆盖:
DefaultRowSorter<M extends TableModel,Integer> 中的 getComparator
参数:
column - 要获取 Comparator 的列,就底层模型而言
返回:
指定列的 Comparator
抛出:
IndexOutOfBoundsException - 如果 column 超出底层模型的范围

useToString

protected boolean useToString(int column)
返回排序过程中进行比较之前是否要将值转换为字符串。如果为 true,则将使用 ModelWrapper.getStringValueAt;否则,将使用 ModelWrapper.getValueAt。由子类(比如 TableRowSorter)决定是否在其 ModelWrapper 实现中遵守此值。

覆盖:
DefaultRowSorter<M extends TableModel,Integer> 中的 useToString
参数:
column - 要测试的列的索引,就底层模型而言
抛出:
IndexOutOfBoundsException - 如果 column 无效