|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
java.lang.Objectjavax.swing.RowSorter<M>
javax.swing.DefaultRowSorter<M,Integer>
javax.swing.table.TableRowSorter<M>
M - 模型的类型,必须为 TableModel 的一个实现public class TableRowSorter<M extends TableModel>
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:
setComparator 方法为列指定了 Comparator,则使用它。
getColumnClass 返回的列类是 String,则使用 Collator.getInstance() 返回的 Comparator。
Comparable,则使用调用 compareTo 方法的 Comparator。
TableStringConverter,则使用它将值转换为 String,然后使用 Collator.getInstance() 返回的 Comparator。
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。这将明显增强此类的性能。
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.RowSorter 继承的方法 |
|---|
addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListener |
| 从类 java.lang.Object 继承的方法 |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| 构造方法详细信息 |
|---|
public TableRowSorter()
TableRowSorter。
public TableRowSorter(M model)
model 作为底层 TableModel 创建一个 TableRowSorter。
model - 要使用的底层 TableModel,null 被视为空模型。| 方法详细信息 |
|---|
public void setModel(M model)
TableModel 设置为此 TableRowSorter 要使用的底层模型。可以用 null 值设置空模型。
model - 要使用的底层模型,或者 nullpublic void setStringConverter(TableStringConverter stringConverter)
null,则此方法用于将所有不具有已注册 Comparator 的对象值转换为字符串。
stringConverter - 负责将值从模型转换为字符串的对象public TableStringConverter getStringConverter()
public Comparator<?> getComparator(int column)
Comparator。如果没有使用 setComparator 方法指定 Comparator,那么将基于指定列的列类(TableModel.getColumnClass)返回 Comparator。如果列类为 String,则返回 Collator.getInstance。如果列类实现 Comparable,则返回调用 compareTo 方法的私有 Comparator。否则,返回 Collator.getInstance。
DefaultRowSorter<M extends TableModel,Integer> 中的 getComparatorcolumn - 要获取 Comparator 的列,就底层模型而言
Comparator
IndexOutOfBoundsException - 如果 column 超出底层模型的范围protected boolean useToString(int column)
ModelWrapper.getStringValueAt;否则,将使用 ModelWrapper.getValueAt。由子类(比如 TableRowSorter)决定是否在其 ModelWrapper 实现中遵守此值。
DefaultRowSorter<M extends TableModel,Integer> 中的 useToStringcolumn - 要测试的列的索引,就底层模型而言
IndexOutOfBoundsException - 如果 column 无效
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。