- 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。 例如,如果在TableModelJTable更新一行,则调用rowsUpdated。 当模型改变,视图可以调用到任何下列方法之一:modelStructureChanged,allRowsChanged,rowsInserted,rowsDeleted和rowsUpdated。- 从以下版本开始:
- 1.6
- 另请参见:
-
TableRowSorter
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static classRowSorter.SortKeySortKey描述特定列的排序顺序。
-
构造方法摘要
构造方法 Constructor 描述 RowSorter()创建一个RowSorter。
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 voidaddRowSorterListener(RowSorterListener l)添加RowSorterListener以接收有关此RowSorter通知。abstract voidallRowsChanged()当底层模型的内容完全改变时调用。abstract intconvertRowIndexToModel(int index)根据底层模型返回index的位置。abstract intconvertRowIndexToView(int index)根据视图返回index的位置。protected voidfireRowSorterChanged(int[] lastRowIndexToModel)通知侦听器映射已更改。protected voidfireSortOrderChanged()通知侦听器排序顺序已更改。abstract MgetModel()返回底层模型。abstract intgetModelRowCount()返回底层模型中的行数。abstract List<? extends RowSorter.SortKey>getSortKeys()返回当前的排序键。abstract intgetViewRowCount()返回视图中的行数。abstract voidmodelStructureChanged()当底层模型结构完全改变时调用。voidremoveRowSorterListener(RowSorterListener l)删除一个RowSorterListener。abstract voidrowsDeleted(int firstRow, int endRow)当从指定范围(含)的底层模型中删除行时调用。abstract voidrowsInserted(int firstRow, int endRow)当行已经在指定范围(包括)中插入到底层模型中时调用。abstract voidrowsUpdated(int firstRow, int endRow)在基础模型中在指定范围(包括)之间更改行时调用。abstract voidrowsUpdated(int firstRow, int endRow, int column)当行中的列在指定范围内的底层模型中更新时调用。abstract voidsetSortKeys(List<? extends RowSorter.SortKey> keys)设置当前的排序键。abstract voidtoggleSortOrder(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- 如果任何一个参数在更改后的基础模型的范围之外,firstRowendRow或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
-
-