- 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
。按顺序基于当前的
SortKey
s进行排序。 如果两个对象相等(列的Comparator
返回0),则使用下一个SortKey
。 如果没有SortKey
或订单为UNSORTED
,则使用模型中行的顺序。每列的排序通过
Comparator
,您可以使用setComparator
方法指定。 如果Comparator
尚未指定,Comparator
由归国Collator.getInstance()
用在调用的结果toString
于底层对象。Comparator
永远不会通过null
。null
值被视为在非null
值之前发生,并且两个null
值被视为相等。如果指定
Comparator
那蒙上它的参数来比由模型提供的其他A型,ClassCastException
当数据的排序将被抛出。除了排序之外,
DefaultRowSorter
还提供了过滤行的功能。 过滤通过的方式进行RowFilter
正在使用指定setRowFilter
方法。 如果未指定过滤器,则包括所有行。默认情况下,行按未排序顺序(与模型相同),并且每列都是可排序的。 默认
Comparator
s记录在子类中(例如,TableRowSorter
)。如果基础模型结构发生更改(调用
modelStructureChanged
方法),则会将以下内容重置为默认值:Comparator
s按列,当前排序顺序以及每列是否可排序。 要查找默认值Comparator
,请参阅具体实现(例如,TableRowSorter
)。 默认排序顺序是未排序的(与模型相同),默认情况下列可排序。DefaultRowSorter
是一个抽象类。 具体子类必须通过调用setModelWrapper
来提供对基础数据的setModelWrapper
。 必须在调用构造函数后立即调用setModelWrapper
方法,理想情况是从子类的构造函数中调用。 将导致未定义的行为,如果您使用的是DefaultRowSorter
,无需指定ModelWrapper
。DefaultRowSorter
有两个正式的类型参数。 第一个类型参数对应于模型的类,例如DefaultTableModel
。 第二个类型参数对应于传递给RowFilter
的标识符的类。 有关类型参数的更多详细信息,请参阅TableRowSorter
和RowFilter
。- 从以下版本开始:
- 1.6
- 另请参见:
-
TableRowSorter
,DefaultTableModel
,Collator
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 protected static class
DefaultRowSorter.ModelWrapper<M,I>
DefaultRowSorter.ModelWrapper
负责提供由DefaultRowSorter
排序的数据。-
嵌套类/接口声明在类 javax.swing.RowSorter
RowSorter.SortKey
-
-
构造方法摘要
构造方法 构造器 描述 DefaultRowSorter()
创建一个空DefaultRowSorter
。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 int
convertRowIndexToModel(int index)
根据基础模型返回index
的位置。int
convertRowIndexToView(int index)
根据视图返回index
的位置。Comparator<?>
getComparator(int column)
返回指定列的Comparator
。int
getMaxSortKeys()
返回排序键的最大数量。M
getModel()
返回基础模型。protected DefaultRowSorter.ModelWrapper<M,I>
getModelWrapper()
返回提供正在排序和筛选的数据的模型包装器。RowFilter<? super M,? super I>
getRowFilter()
返回用于确定应从视图中隐藏哪些行(如果有)的过滤器。List<? extends RowSorter.SortKey>
getSortKeys()
返回当前的排序键。boolean
getSortsOnUpdates()
如果在更新基础模型时发生排序,则返回true; 否则,返回false。boolean
isSortable(int column)
如果指定的列是可排序的,则返回true; 否则,是的。void
rowsDeleted(int firstRow, int endRow)
从指定范围(包括)中的基础模型中删除行时调用。void
rowsInserted(int firstRow, int endRow)
在将行插入指定范围(包括)中的基础模型时调用。void
rowsUpdated(int firstRow, int endRow)
在指定范围(包括)之间的基础模型中更改行时调用。void
rowsUpdated(int firstRow, int endRow, int column)
在指定范围之间的基础模型中更新行中的列时调用。void
setComparator(int column, Comparator<?> comparator)
设置在对指定列进行排序时使用的Comparator
。void
setMaxSortKeys(int max)
设置排序键的最大数量。protected void
setModelWrapper(DefaultRowSorter.ModelWrapper<M,I> modelWrapper)
设置模型包装器,提供正在排序和筛选的数据。void
setRowFilter(RowFilter<? super M,? super I> filter)
设置用于确定应从视图中隐藏哪些行(如果有)的过滤器。void
setSortable(int column, boolean sortable)
设置指定的列是否可排序。void
setSortKeys(List<? extends RowSorter.SortKey> sortKeys)
设置排序键。void
setSortsOnUpdates(boolean sortsOnUpdates)
如果为true,则指定在更新基础模型时发生排序(调用rowsUpdated
)。void
sort()
根据当前正在排序的列的排序键以及与此排序器关联的过滤器(如果有),对视图中的行进行排序和过滤。void
toggleSortOrder(int column)
如果指定的列已经是主要排序列,则将排序顺序从升序转换为降序(或降序为升序); 否则,使指定列成为主要排序列,并按升序排序。protected boolean
useToString(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
超出基础模型的范围
-
-