|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
java.lang.Objectjavax.swing.RowSorter<M>
M - 底层模型的类型public abstract class RowSorter<M>
RowSorter 提供排序和过滤的基础。创建和安装了 RowSorter 之后,您几乎不需要直接与它交互。有关 JTable 的 RowSorter 具体实现,请参阅 TableRowSorter。
RowSorter 的主要功能在于,提供两个坐标系统之间的映射关系:视图的映射关系(例如 JTable)和底层数据源(通常是模型)的映射关系。
视图调用 RowSorter 的以下方法:
toggleSortOrder — 当发生了触发排序操作的恰当用户行为时,视图调用此方法。例如,用户在表中单击列标题时。
RowSorter 不应该更新其映射关系。
convertRowIndexToModel、convertRowIndexToView 和 getViewRowCount 方法,所以这些方法需要很快的运行快速。
RowSorter 通过 RowSorterListener 提供更改的通知。它发送两种类型的通知:
RowSorterEvent.Type.SORT_ORDER_CHANGED — 通知侦听器排序顺序发生了更改。此通知通常后跟一个通知,表示排序发生了更改。
RowSorterEvent.Type.SORTED — 通知侦听器由 RowSorter 维护的映射关系已经以某种方式发生了更改。
RowSorter 实现与底层模型通常没有一对一的映射关系,但它们也可以这样做。例如,如果数据库进行排序操作,则可以通过数据库调用 toggleSortOrder (在后台线程上),并重写映射方法以返回传入的参数。
RowSorter 的具体实现需要引用一个模型,比如 TableModel 或 ListModel。JTable 和 JList 之类的视图类也将引用该模型。要避免排序依赖关系,RowSorter 实现不应该在模型上安装侦听器。而是在模型更改时,视图类调用 RowSorter。例如,如果在 TableModel 中更新了一行,则 JTable 调用 rowsUpdated。模型更改时,视图可以调用任意以下方法:modelStructureChanged、allRowsChanged、rowsInserted、rowsDeleted 和 rowsUpdated。
TableRowSorter| 嵌套类摘要 | |
|---|---|
static class |
RowSorter.SortKey
SortKey 描述特定列的排序顺序。 |
| 构造方法摘要 | |
|---|---|
RowSorter()
创建一个 RowSorter。 |
|
| 方法摘要 | |
|---|---|
void |
addRowSorterListener(RowSorterListener l)
添加一个 RowSorterListener 来接收有关此 RowSorter 的通知。 |
abstract void |
allRowsChanged()
当底层模型的内容完全更改时,调用此方法。 |
abstract int |
convertRowIndexToModel(int index)
返回基于底层模型的 index 的位置。 |
abstract int |
convertRowIndexToView(int index)
返回基于视图 index 的位置。 |
protected void |
fireRowSorterChanged(int[] lastRowIndexToModel)
通知侦听器映射关系发生了更改。 |
protected void |
fireSortOrderChanged()
通知侦听器排序顺序发生了更改。 |
abstract M |
getModel()
返回底层模型。 |
abstract int |
getModelRowCount()
返回底层模型中的行数。 |
abstract List<? extends RowSorter.SortKey> |
getSortKeys()
返回当前排序键。 |
abstract int |
getViewRowCount()
返回视图中的行数。 |
abstract void |
modelStructureChanged()
当底层模型结构完全更改时,调用此方法。 |
void |
removeRowSorterListener(RowSorterListener l)
移除一个 RowSorterListener。 |
abstract void |
rowsDeleted(int firstRow,
int endRow)
当行已经从指定范围(包括)内的底层模型中被删除时,调用此方法。 |
abstract void |
rowsInserted(int firstRow,
int endRow)
当行已经插入到指定范围(包括)内的底层模型时,调用此方法。 |
abstract void |
rowsUpdated(int firstRow,
int endRow)
当行已经在指定范围(包括)内的底层模型中被更改时,调用此方法。 |
abstract void |
rowsUpdated(int firstRow,
int endRow,
int column)
当行中的列已经在指定范围内的底层模型中被更新时,调用此方法。 |
abstract void |
setSortKeys(List<? extends RowSorter.SortKey> keys)
设置当前排序键。 |
abstract void |
toggleSortOrder(int column)
颠倒指定列的排序顺序。 |
| 从类 java.lang.Object 继承的方法 |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| 构造方法详细信息 |
|---|
public RowSorter()
RowSorter。
| 方法详细信息 |
|---|
public abstract M getModel()
public abstract void toggleSortOrder(int column)
如果此方法导致更改排序顺序和排序操作,则它将发送适当的 RowSorterListener 通知。
column - 要切换排序顺序的列,就底层模型而言
IndexOutOfBoundsException - 如果列超出底层模型的范围public abstract int convertRowIndexToModel(int index)
index 的位置。也就是说,对于视图坐标中的行 index,此方法返回基于底层模型的行索引。
index - 基于底层视图的行索引
IndexOutOfBoundsException - 如果 index 超出视图的范围public abstract int convertRowIndexToView(int index)
index 的位置。也就是说,对于底层模型坐标中的行 index,此方法返回基于视图的行索引。
index - 基于底层模型的行索引
IndexOutOfBoundsException - 如果 index 超出模型的范围public abstract void setSortKeys(List<? extends RowSorter.SortKey> keys)
keys - 新的 SortKeys;null 是指定一个空列表的简写,表示视图应该是未排序的。public abstract List<? extends RowSorter.SortKey> getSortKeys()
非 null List,可以返回一个无法修改的 List。如果需要更改排序键,可创建所返回 List 的一个副本,更改该副本并使用新列表调用 setSortKeys。
public abstract int getViewRowCount()
getModelRowCount()public abstract int getModelRowCount()
getViewRowCount()public abstract void modelStructureChanged()
TableModel 中的列数发生了更改,则此方法将被调用。
通常不调用此方法。此方法是公共的,允许视图类调用它。
public abstract void allRowsChanged()
通常不调用此方法。此方法是公共的,允许视图类调用它。
public abstract void rowsInserted(int firstRow,
int endRow)
参数指定有效范围的索引。第一个参数是基于更改之前的模型的,必须小于等于更改之前的模型的大小。第二个参数是基于更改之后的模型的,必须小于更改之后的模型的大小。例如,如果有一个 5 行的模型并在该模型的尾部添加 3 个项,则其索引为 5、7。
通常不调用此方法。此方法是公共的,允许视图类调用它。
firstRow - 第一行endRow - 最后一行
IndexOutOfBoundsException - 如果任一参数无效,或者 firstRow > endRow
public abstract void rowsDeleted(int firstRow,
int endRow)
参数指定有效范围的索引,其基于更改之前的模型。例如,如果有一个 5 行的模型并从模型的尾部删除 3 个项,则其索引为 2、4。
通常不调用此方法。此方法是公共的,允许视图类调用它。
firstRow - 第一行endRow - 最后一行
IndexOutOfBoundsException - 如果任一参数超出模型更改之前的范围,或者 firstRow > endRow
public abstract void rowsUpdated(int firstRow,
int endRow)
通常不调用此方法。此方法是公共的,允许视图类调用它。
firstRow - 第一行,就底层模型而言endRow - 最后一行,就底层模型而言
IndexOutOfBoundsException - 如果任一参数超出模型更改之前的范围,或者 firstRow > endRow
public abstract void rowsUpdated(int firstRow,
int endRow,
int column)
通常不调用此方法。此方法是公共的,允许视图类调用它。
firstRow - 第一行,就底层模型而言endRow - 最后一行,就底层模型而言column - 已更改的列,就底层模型而言
IndexOutOfBoundsException - 如果任一参数超出底层模型更改之后的范围,firstRow > endRow 或者 column 超出底层模型的范围public void addRowSorterListener(RowSorterListener l)
RowSorterListener 来接收有关此 RowSorter 的通知。如果多次添加相同的侦听器,则它将接收多个通知。如果 l 为 null,则不执行任何操作。
l - RowSorterListenerpublic void removeRowSorterListener(RowSorterListener l)
RowSorterListener。如果 l 为 null,则不执行任何操作。
l - RowSorterListenerprotected void fireSortOrderChanged()
protected void fireRowSorterChanged(int[] lastRowIndexToModel)
lastRowIndexToModel - 模型索引到排序之前视图索引的映射关系,可以为 null
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。