- java.lang.Object
-
- javax.swing.RowSorter<M>
-
- javax.swing.DefaultRowSorter<M,I>
-
- 参数类型
-
M- 模型的类型 -
I- 传递给RowFilter的标识符的类型
- 已知直接子类:
-
TableRowSorter
public abstract class DefaultRowSorter<M,I> extends RowSorter<M>
RowSorter的实现,提供围绕基于网格的数据模型的排序和过滤。 除了创建和安装RowSorter,您很少需要直接与其进行交互。 请参阅TableRowSorter的具体实施RowSorter为JTable。按顺序基于当前的
SortKeys进行排序。 如果两个对象相等(列的Comparator返回0),则使用下一个SortKey。 如果没有SortKey或订单为UNSORTED,则使用模型中行的顺序。每列的排序通过
Comparator,您可以使用setComparator方法指定。 如果Comparator尚未指定,Comparator由归国Collator.getInstance()用在调用的结果toString于底层对象。Comparator永远不会通过null。null值被视为在非null值之前发生,并且两个null值被视为相等。如果指定
Comparator那蒙上它的参数来比由模型提供的其他A型,ClassCastException当数据的排序将被抛出。除了排序之外,
DefaultRowSorter还提供了过滤行的功能。 过滤通过的方式进行RowFilter正在使用指定setRowFilter方法。 如果未指定过滤器,则包括所有行。默认情况下,行按未排序顺序(与模型相同),并且每列都是可排序的。 默认
Comparators记录在子类中(例如,TableRowSorter)。如果基础模型结构发生更改(调用
modelStructureChanged方法),则会将以下内容重置为默认值:Comparators按列,当前排序顺序以及每列是否可排序。 要查找默认值Comparator,请参阅具体实现(例如,TableRowSorter)。 默认排序顺序是未排序的(与模型相同),默认情况下列可排序。DefaultRowSorter是一个抽象类。 具体子类必须通过调用setModelWrapper来提供对基础数据的setModelWrapper。 必须在调用构造函数后立即调用setModelWrapper方法,理想情况是从子类的构造函数中调用。 将导致未定义的行为,如果您使用的是DefaultRowSorter,无需指定ModelWrapper。DefaultRowSorter有两个正式的类型参数。 第一个类型参数对应于模型的类,例如DefaultTableModel。 第二个类型参数对应于传递给RowFilter的标识符的类。 有关类型参数的更多详细信息,请参阅TableRowSorter和RowFilter。- 从以下版本开始:
- 1.6
- 另请参见:
-
TableRowSorter,DefaultTableModel,Collator
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 protected static classDefaultRowSorter.ModelWrapper<M,I>DefaultRowSorter.ModelWrapper负责提供由DefaultRowSorter排序的数据。-
嵌套类/接口声明在类 javax.swing.RowSorter
RowSorter.SortKey
-
-
构造方法摘要
构造方法 构造器 描述 DefaultRowSorter()创建一个空DefaultRowSorter。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 intconvertRowIndexToModel(int index)根据基础模型返回index的位置。intconvertRowIndexToView(int index)根据视图返回index的位置。Comparator<?>getComparator(int column)返回指定列的Comparator。intgetMaxSortKeys()返回排序键的最大数量。MgetModel()返回基础模型。protected DefaultRowSorter.ModelWrapper<M,I>getModelWrapper()返回提供正在排序和筛选的数据的模型包装器。RowFilter<? super M,? super I>getRowFilter()返回用于确定应从视图中隐藏哪些行(如果有)的过滤器。List<? extends RowSorter.SortKey>getSortKeys()返回当前的排序键。booleangetSortsOnUpdates()如果在更新基础模型时发生排序,则返回true; 否则,返回false。booleanisSortable(int column)如果指定的列是可排序的,则返回true; 否则,是的。voidrowsDeleted(int firstRow, int endRow)从指定范围(包括)中的基础模型中删除行时调用。voidrowsInserted(int firstRow, int endRow)在将行插入指定范围(包括)中的基础模型时调用。voidrowsUpdated(int firstRow, int endRow)在指定范围(包括)之间的基础模型中更改行时调用。voidrowsUpdated(int firstRow, int endRow, int column)在指定范围之间的基础模型中更新行中的列时调用。voidsetComparator(int column, Comparator<?> comparator)设置在对指定列进行排序时使用的Comparator。voidsetMaxSortKeys(int max)设置排序键的最大数量。protected voidsetModelWrapper(DefaultRowSorter.ModelWrapper<M,I> modelWrapper)设置模型包装器,提供正在排序和筛选的数据。voidsetRowFilter(RowFilter<? super M,? super I> filter)设置用于确定应从视图中隐藏哪些行(如果有)的过滤器。voidsetSortable(int column, boolean sortable)设置指定的列是否可排序。voidsetSortKeys(List<? extends RowSorter.SortKey> sortKeys)设置排序键。voidsetSortsOnUpdates(boolean sortsOnUpdates)如果为true,则指定在更新基础模型时发生排序(调用rowsUpdated)。voidsort()根据当前正在排序的列的排序键以及与此排序器关联的过滤器(如果有),对视图中的行进行排序和过滤。voidtoggleSortOrder(int column)如果指定的列已经是主要排序列,则将排序顺序从升序转换为降序(或降序为升序); 否则,使指定列成为主要排序列,并按升序排序。protected booleanuseToString(int column)返回在排序时进行比较之前是否将值转换为字符串。
-
-
-
方法详细信息
-
setModelWrapper
protected final void setModelWrapper(DefaultRowSorter.ModelWrapper<M,I> modelWrapper)
设置模型包装器,提供正在排序和筛选的数据。- 参数
-
modelWrapper- 模型包装器,负责提供已排序和筛选的数据 - 异常
-
IllegalArgumentException- 如果modelWrapper是null
-
getModelWrapper
protected final DefaultRowSorter.ModelWrapper<M,I> getModelWrapper()
返回提供正在排序和筛选的数据的模型包装器。- 结果
- 模型包装器负责提供被排序和过滤的数据
-
setSortable
public void setSortable(int column, boolean sortable)设置指定的列是否可排序。 仅在调用toggleSortOrder时检查指定的值。 通过直接设置排序键,仍然可以对已标记为不可排序的列进行排序。 默认值为true。- 参数
-
column- 根据基础模型启用或禁用排序的列 -
sortable- 指定的列是否可排序 - 异常
-
IndexOutOfBoundsException- 如果column超出模型范围 - 另请参见:
-
toggleSortOrder(int),setSortKeys(java.util.List<? extends javax.swing.RowSorter.SortKey>)
-
isSortable
public boolean isSortable(int column)
如果指定的列是可排序的,则返回true; 否则,是的。- 参数
-
column- 根据基础模型检查排序的列 - 结果
- 如果列是可排序的,则为true
- 异常
-
IndexOutOfBoundsException- 如果列超出基础模型的范围
-
setSortKeys
public void setSortKeys(List<? extends RowSorter.SortKey> sortKeys)
设置排序键。 这将创建所提供的List的副本; 对提供的List后续更改不会影响此DefaultRowSorter。 如果排序键已更改,则触发排序。- Specified by:
-
setSortKeys类RowSorter<M> - 参数
-
sortKeys- 新的SortKeys;null是指定空列表的简写,表示视图应该是未排序的 - 异常
-
IllegalArgumentException-如果有的话中的值的sortKeys都为空或具有模式的范围之外的列索引
-
getSortKeys
public List<? extends RowSorter.SortKey> getSortKeys()
返回当前的排序键。 这将返回一个不可修改的non-null List。 如果您需要更改排序键,请复制返回的List,更改副本并使用新列表调用setSortKeys。- Specified by:
-
getSortKeys在类RowSorter<M> - 结果
- 当前的排序顺序
-
setMaxSortKeys
public void setMaxSortKeys(int max)
设置排序键的最大数量。 排序键的数量决定了排序时如何解析相等的值。 例如,假设已创建表行分类器并在其上调用setMaxSortKeys(2)。 用户单击第1列的标题,导致表行根据第1列中的项目进行排序。接下来,用户单击第2列的标题,从而根据第2列中的项目对表进行排序。 如果第2列中的任何项目相同,则根据第1列中的项目对这些特定行进行排序。在这种情况下,我们说行主要在第2列排序,其次在第1列排序。如果用户然后单击第3列的标题,然后项目主要在第3列排序,其次在第2列排序。由于排序键的最大数量已设置为2(setMaxSortKeys,因此第1列不再对订单产生影响。最大排序键数由
toggleSortOrder强制执行。 您可以通过直接调用setSortKeys来指定更多排序键,它们都将受到尊重。 但是,如果随后调用toggleSortOrder,则将强制执行最大数量的排序键。 默认值为3。- 参数
-
max- 排序键的最大数量 - 异常
-
IllegalArgumentException- 如果max<1
-
getMaxSortKeys
public int getMaxSortKeys()
返回排序键的最大数量。- 结果
- 排序键的最大数量
-
setSortsOnUpdates
public void setSortsOnUpdates(boolean sortsOnUpdates)
如果为true,则指定在更新基础模型时发生排序(调用rowsUpdated)。 例如,如果这是真的并且用户编辑条目,则视图中该项目的位置可能会更改。 默认值为false。- 参数
-
sortsOnUpdates- 是否对更新事件进行排序
-
getSortsOnUpdates
public boolean getSortsOnUpdates()
如果在更新基础模型时发生排序,则返回true; 否则,返回false。- 结果
- 是否在更新模型时进行排序
-
setRowFilter
public void setRowFilter(RowFilter<? super M,? super I> filter)
设置用于确定应从视图中隐藏哪些行(如果有)的过滤器。 在排序之前应用过滤器。 值null表示应包含模型中的所有值。RowFilter的include方法传递了一个包装底层模型的Entry。 在列数Entry对应于列在数量ModelWrapper。 标识符也来自ModelWrapper。此方法触发排序。
- 参数
-
filter- 用于确定应包含哪些条目的过滤器
-
getRowFilter
public RowFilter<? super M,? super I> getRowFilter()
返回用于确定应从视图中隐藏哪些行(如果有)的过滤器。- 结果
- 过滤器
-
toggleSortOrder
public void toggleSortOrder(int column)
如果指定的列已经是主要排序列,则将排序顺序从升序转换为降序(或降序为升序); 否则,使指定列成为主要排序列,并按升序排序。 如果指定的列不可排序,则此方法无效。- Specified by:
-
toggleSortOrder类RowSorter<M> - 参数
-
column- 根据基础模型生成主排序列的列的索引 - 异常
-
IndexOutOfBoundsException- 如果列超出基础模型的范围 - 另请参见:
-
setSortable(int,boolean),setMaxSortKeys(int)
-
convertRowIndexToView
public int convertRowIndexToView(int index)
根据视图返回index的位置。 也就是说,对于底层模型坐标中的行index,这将根据视图返回行索引。- Specified by:
-
convertRowIndexToView在类RowSorter<M> - 参数
-
index- 基础模型的行索引 - 结果
- 视图中的行索引,如果已从视图中过滤掉索引,则返回-1
- 异常
-
IndexOutOfBoundsException- 如果index超出了模型的范围
-
convertRowIndexToModel
public int convertRowIndexToModel(int index)
根据基础模型返回index的位置。 也就是说,对于视图坐标中的行index,这将根据基础模型返回行索引。- Specified by:
-
convertRowIndexToModel类RowSorter<M> - 参数
-
index- 基础视图的行索引 - 结果
- 视图方面的行索引
- 异常
-
IndexOutOfBoundsException- 如果index超出视图范围
-
sort
public void sort()
根据当前正在排序的列的排序键以及与此排序器关联的过滤器(如果有),对视图中的行进行排序和过滤。 空sortKeys列表表示视图应该未排序,与模型相同。
-
useToString
protected boolean useToString(int column)
返回在排序时进行比较之前是否将值转换为字符串。 如果真ModelWrapper.getStringValueAt将被使用,否则ModelWrapper.getValueAt将被使用。 由子类(例如TableRowSorter)来实现其ModelWrapper实现中的此值。- 参数
-
column- 要根据基础模型测试的列的索引 - 结果
- 如果要在排序时进行比较之前将值转换为字符串,则为true
- 异常
-
IndexOutOfBoundsException- 如果column无效
-
setComparator
public void setComparator(int column, Comparator<?> comparator)设置在对指定列进行排序时使用的Comparator。 这不会触发排序。 如果要在设置比较器后进行排序,则需要显式调用sort。- 参数
-
column- 根据基础模型,Comparator用于的列的索引 -
comparator- 使用Comparator - 异常
-
IndexOutOfBoundsException- 如果column超出基础模型的范围
-
getComparator
public Comparator<?> getComparator(int column)
返回指定列的Comparator。 如果尚未为该列指定Comparator则将返回null。- 参数
-
column-列去取Comparator了,在底层模型而言 - 结果
-
指定列的
Comparator - 异常
-
IndexOutOfBoundsException- 如果列超出基础模型的范围
-
rowsInserted
public void rowsInserted(int firstRow, int endRow)在将行插入指定范围(包括)中的基础模型时调用。参数给出了受影响范围的指数。 第一个参数是在更改之前的模型方面,并且必须小于或等于更改之前的模型的大小。 第二个参数是在更改后的模型方面,并且必须小于更改后模型的大小。 例如,如果您有一个5行模型并在模型末尾添加3个项目,则索引为5,7。
您通常不会调用此方法。 此方法是公共的,以允许视图类调用它。
- Specified by:
-
rowsInserted在类RowSorter<M> - 参数
-
firstRow- 第一行 -
endRow- 最后一行 - 异常
-
IndexOutOfBoundsException- 如果任一参数无效,或firstRow>endRow
-
rowsDeleted
public void rowsDeleted(int firstRow, int endRow)从指定范围(包括)中的基础模型中删除行时调用。参数给出了受影响范围的指数,并且是在变化之前的模型方面。 例如,如果您有一个5行模型并从模型末尾删除3个项目,则索引为2,4。
您通常不会调用此方法。 此方法是公共的,以允许视图类调用它。
- Specified by:
-
rowsDeleted类RowSorter<M> - 参数
-
firstRow- 第一行 -
endRow- 最后一行 - 异常
-
IndexOutOfBoundsException- 如果任一参数超出更改前模型的范围,或firstRow>endRow
-
rowsUpdated
public void rowsUpdated(int firstRow, int endRow)在指定范围(包括)之间的基础模型中更改行时调用。您通常不会调用此方法。 此方法是公共的,以允许视图类调用它。
- Specified by:
-
rowsUpdated类RowSorter<M> - 参数
-
firstRow- 就基础模型而言,第一行 -
endRow- 最后一行,就基础模型而言 - 异常
-
IndexOutOfBoundsException- 如果任一参数超出基础模型的范围,或firstRow>endRow
-
rowsUpdated
public void rowsUpdated(int firstRow, int endRow, int column)在指定范围之间的基础模型中更新行中的列时调用。您通常不会调用此方法。 此方法是公共的,以允许视图类调用它。
- Specified by:
-
rowsUpdated在类RowSorter<M> - 参数
-
firstRow- 就基础模型而言,第一行 -
endRow- 最后一行,就基础模型而言 -
column- 已根据基础模型更改的列 - 异常
-
IndexOutOfBoundsException- 如果任一参数在更改后超出基础模型的范围,则firstRow>endRow或column超出基础模型的范围
-
-