- java.lang.Object
-
- javax.swing.RowSorter<M>
-
- 参数类型
-
M
- 底层模型的类型
- 已知直接子类:
-
DefaultRowSorter
public abstract class RowSorter<M> extends Object
RowSorter
为排序和筛选提供依据。 除了创建和安装一个RowSorter
,你很少需要直接与一个人交互。 请参阅TableRowSorter
的具体实施RowSorter
为JTable
。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
。- 从以下版本开始:
- 1.6
- 另请参见:
-
TableRowSorter
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static class
RowSorter.SortKey
SortKey描述特定列的排序顺序。
-
构造方法摘要
构造方法 Constructor 描述 RowSorter()
创建一个RowSorter
。
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 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)
反转指定列的排序顺序。
-
-
-
方法详细信息
-
getModel
public abstract M getModel()
返回底层模型。- 结果
- 底层模型
-
toggleSortOrder
public abstract void toggleSortOrder(int column)
反转指定列的排序顺序。 子类在调用时提供确切的行为。 通常,如果指定的列已经是主排序列,则这会将排序顺序从升序转换为降序(或降序升序) 否则,使指定的列成为主排序列,具有升序的排序顺序。 如果指定的列不可排序,则此方法无效。如果这导致更改排序顺序和排序,将会发送相应的
RowSorterListener
通知。- 参数
-
column
- 根据底层模型切换排序顺序的列 - 异常
-
IndexOutOfBoundsException
- 如果列超出了底层模型的范围
-
convertRowIndexToModel
public abstract int convertRowIndexToModel(int index)
根据底层模型返回index
的位置。 也就是说,对于视图坐标中的行index
,这将返回基于模型的行索引。- 参数
-
index
- 根据底层视图的行索引 - 结果
- 行索引在视图方面
- 异常
-
IndexOutOfBoundsException
- 如果index
在视图的范围之外
-
convertRowIndexToView
public abstract int convertRowIndexToView(int index)
在视图方面返回index
的位置。 也就是说,对于底层模型的坐标中的行index
,这将返回视图的行索引。- 参数
-
index
- 基础模型的行索引 - 结果
- 视图中的行索引,如果索引已从视图中过滤出来,则为-1
- 异常
-
IndexOutOfBoundsException
- 如果index
在模型的范围之外
-
setSortKeys
public abstract void setSortKeys(List<? extends RowSorter.SortKey> keys)
设置当前的排序键。- 参数
-
keys
- 新SortKeys
;null
是指定空列表的缩写,表示视图应该是未排序的
-
getSortKeys
public abstract List<? extends RowSorter.SortKey> getSortKeys()
返回当前的排序键。 这必须返回一个non-null List
并可能会返回一个不可修改的List
。 如果您需要更改排序键,请复制所返回的List
,并复制副本并使用新列表调用setSortKeys
。- 结果
- 当前排序顺序
-
getViewRowCount
public abstract int getViewRowCount()
返回视图中的行数。 如果内容已被过滤,这可能与底层模型的行数有所不同。- 结果
- 视图中的行数
- 另请参见:
-
getModelRowCount()
-
getModelRowCount
public abstract int getModelRowCount()
返回底层模型中的行数。- 结果
- 底层模型中的行数
- 另请参见:
-
getViewRowCount()
-
modelStructureChanged
public abstract void modelStructureChanged()
当底层模型结构完全改变时调用。 例如,如果TableModel
的列数更改,则将调用此方法。通常不会调用此方法。 这种方法是公开的,允许视图类调用它。
-
allRowsChanged
public abstract void allRowsChanged()
当底层模型的内容完全改变时调用。 表的结构是一样的,只有内容已经改变了。 这通常是在太贵的情况下发送的,以表征其他方法的变化。通常不会调用此方法。 这种方法是公开的,允许视图类调用它。
-
rowsInserted
public abstract void rowsInserted(int firstRow, int endRow)
当行已经在指定范围(包括)中插入到底层模型中时调用。参数给出了影响范围的指标。 第一个参数是变更前的模型,并且必须小于或等于变更前的模型大小。 第二个参数是改变后的模型,必须小于变更后的模型大小。 例如,如果您有5行模型,并在模型的末尾添加3个项目,那么索引为5,7。
通常不会调用此方法。 这种方法是公开的,允许视图类调用它。
- 参数
-
firstRow
- 第一行 -
endRow
- 最后一行 - 异常
-
IndexOutOfBoundsException
- 如果任一参数无效,或firstRow
>endRow
-
rowsDeleted
public abstract void rowsDeleted(int firstRow, int endRow)
当从指定范围(含)的底层模型中删除行时调用。这些参数给出了影响范围的指标,并且是在变化前的模型。 例如,如果您有5行模型,并从模型末尾删除3个项目,则索引为2,4。
通常不会调用此方法。 这种方法是公开的,允许视图类调用它。
- 参数
-
firstRow
- 第一行 -
endRow
- 最后一行 - 异常
-
IndexOutOfBoundsException
- 如果任一参数超出变更前模型的范围,或者firstRow
>endRow
-
rowsUpdated
public abstract void rowsUpdated(int firstRow, int endRow)
在基础模型中在指定范围(包括)之间更改行时调用。通常不会调用此方法。 这种方法是公开的,允许视图类调用它。
- 参数
-
firstRow
- 第一行,在底层模型方面 -
endRow
- 根据底层模型的最后一行 - 异常
-
IndexOutOfBoundsException
- 如果任一参数超出了基础模型的范围,或者firstRow
>endRow
-
rowsUpdated
public abstract void rowsUpdated(int firstRow, int endRow, int column)
当行中的列在指定范围内的底层模型中更新时调用。通常不会调用此方法。 这种方法是公开的,允许视图类调用它。
- 参数
-
firstRow
- 第一行,在底层模型方面 -
endRow
- 根据底层模型的最后一行 -
column
- 根据底层模型改变的列 - 异常
-
IndexOutOfBoundsException
- 如果任何一个参数在更改后的基础模型的范围之外,firstRow
endRow
或column
或column
不在基础模型的范围之内
-
addRowSorterListener
public void addRowSorterListener(RowSorterListener l)
添加RowSorterListener
以接收有关此RowSorter
通知。 如果同一个监听器被多次添加,它将收到多个通知。 如果l
是null
没有做任何事情。- 参数
-
l
-RowSorterListener
-
removeRowSorterListener
public void removeRowSorterListener(RowSorterListener l)
删除一个RowSorterListener
。 如果l
是null
没有做任何事情。- 参数
-
l
-RowSorterListener
-
fireSortOrderChanged
protected void fireSortOrderChanged()
通知侦听器排序顺序已更改。
-
fireRowSorterChanged
protected void fireRowSorterChanged(int[] lastRowIndexToModel)
通知侦听器映射已更改。- 参数
-
lastRowIndexToModel
- 在排序之前从模型索引到查看索引的映射可能为null
-
-