- 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
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 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)
反转指定列的排序顺序。
-
-
-
方法详细信息
-
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
超出基础模型的范围
-
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
-
-