- 类型参数:
-
M- 底层模型的类型
- 直接已知子类:
-
DefaultRowSorter
RowSorter提供了排序和过滤的基础。除了创建和安装一个RowSorter之外,您很少需要直接与其交互。请参考JTable的RowSorter的具体实现TableRowSorter。
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
- 参见:
-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid添加一个RowSorterListener以接收有关此RowSorter的通知。abstract void在底层模型的内容完全更改时调用。abstract intconvertRowIndexToModel(int index) 返回index在底层模型中的位置。abstract intconvertRowIndexToView(int index) 返回index在视图中的位置。protected voidfireRowSorterChanged(int[] lastRowIndexToModel) 通知侦听器映射已更改。protected void通知侦听器排序顺序已更改。abstract MgetModel()返回底层模型。abstract int返回底层模型中的行数。abstract List<? extends RowSorter.SortKey> 返回当前排序键。abstract int返回视图中的行数。abstract void在底层模型结构完全更改时调用。void移除一个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) 反转指定列的排序顺序。
-
Constructor Details
-
RowSorter
public RowSorter()创建一个RowSorter。
-
-
Method Details
-
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
设置当前排序键。- 参数:
-
keys- 新的SortKeys;null是指定空列表的简写,表示视图应该未排序
-
getSortKeys
返回当前排序键。这必须返回一个非空List,可能返回一个不可修改的List。如果需要更改排序键,请复制返回的List,修改副本并使用新列表调用setSortKeys。- 返回:
- 当前排序顺序
-
getViewRowCount
public abstract int getViewRowCount()返回视图中的行数。如果内容已被过滤,则这可能与底层模型的行数不同。- 返回:
- 视图中的行数
- 参见:
-
getModelRowCount
public abstract int getModelRowCount()返回底层模型中的行数。- 返回:
- 底层模型中的行数
- 参见:
-
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
添加一个RowSorterListener以接收有关此RowSorter的通知。如果多次添加相同的侦听器,它将接收多个通知。如果l为null,则不执行任何操作。- 参数:
-
l-RowSorterListener
-
removeRowSorterListener
移除一个RowSorterListener。如果l为null,则不执行任何操作。- 参数:
-
l-RowSorterListener
-
fireSortOrderChanged
protected void fireSortOrderChanged()通知侦听器排序顺序已更改。 -
fireRowSorterChanged
protected void fireRowSorterChanged(int[] lastRowIndexToModel) 通知侦听器映射已更改。- 参数:
-
lastRowIndexToModel- 排序前从模型索引到视图索引的映射,可能为null
-