- 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
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 static classRowSorter.SortKeySortKey描述特定列的排序顺序。
-
构造方法摘要
构造方法 构造器 描述 RowSorter()创建一个RowSorter。
-
方法摘要
所有方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 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- 如果任一参数在更改后超出基础模型的范围,则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
-
-