M
- 底层模型的类型
public abstract class RowSorter<M> extends Object
RowSorter
为排序和筛选提供依据。
除了创建和安装RowSorter
,您很少需要直接与一个人交互。
请参阅TableRowSorter
的具体实施RowSorter
为JTable
。
RowSorter
的主要作用是提供两个坐标系之间的映射:视图(例如JTable
)和基础数据源(通常为模型)的映射。
视图调用了以下方法RowSorter
:
toggleSortOrder
?? 当出现适当的用户手势以触发排序时,视图会调用此视图。 例如,用户单击表中的列标题。 RowSorter
不应更新其映射,直到调用这些方法之一。 convertRowIndexToModel
, convertRowIndexToView
和getViewRowCount
方法,这些方法都需要要快。
RowSorter
通过RowSorter
提供变更RowSorterListener
。 发送两种类型的通知:
RowSorterEvent.Type.SORT_ORDER_CHANGED
?? 通知听众排序顺序已更改。 这通常是通知,排序已更改。 RowSorterEvent.Type.SORTED
?? 通知侦听被保持的映射RowSorter
以某种方式发生了变化。 RowSorter
实现通常与底层模型没有一对一的映射,但它们可以。
例如,如果数据库进行排序, toggleSortOrder
可能会调用数据库(在后台线程中),并覆盖映射方法以返回传入的参数。
RowSorter的RowSorter
需要参考一个模型,如TableModel
或ListModel
。 视图类,如JTable
和JList
,也将引用模型。 为了避免排序相关性, RowSorter
实现不应该在模型上安装一个监听器。 相反,当模型更改时,视图类将调用RowSorter
。 例如,如果一行更新为TableModel
JTable
调用rowsUpdated
。 当模型改变,视图可以调用到任何下列方法之一: modelStructureChanged
, allRowsChanged
, rowsInserted
, rowsDeleted
和rowsUpdated
。
TableRowSorter
Modifier and Type | Class and Description |
---|---|
static class |
RowSorter.SortKey
SortKey描述特定列的排序顺序。
|
Constructor and Description |
---|
RowSorter()
创建一个
RowSorter 。
|
Modifier and Type | Method and Description |
---|---|
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)
反转指定列的排序顺序。
|
public abstract M getModel()
public abstract void toggleSortOrder(int column)
如果这导致更改排序顺序和排序,将发送RowSorterListener
RowSorterListener通知。
column
- 根据底层模型切换排序顺序的列
IndexOutOfBoundsException
- 如果列超出了底层模型的范围
public abstract int convertRowIndexToModel(int index)
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()
non-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
-
RowSorterListener
public void removeRowSorterListener(RowSorterListener l)
RowSorterListener
。
如果l
是null
没有做任何事情。
l
-
RowSorterListener
protected void fireSortOrderChanged()
protected void fireRowSorterChanged(int[] lastRowIndexToModel)
lastRowIndexToModel
- 在排序之前从模型索引到查看索引的映射可以是
null
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.