M
- 模型的类型
I
- 传递给
RowFilter
public abstract class DefaultRowSorter<M,I> extends RowSorter<M>
RowSorter
,它围绕网格数据模型提供排序和过滤。
除了创建和安装RowSorter
,您很少需要直接与一个人交互。
请参阅TableRowSorter
的具体实施RowSorter
为JTable
。
按照当前SortKey
的顺序进行排序。 如果两个对象相等(列的Comparator
返回0),则使用下一个SortKey
。 如果没有SortKey
或订单是UNSORTED
,则使用模型中的行的顺序。
通过Comparator
完成每列的Comparator
,您可以使用setComparator
方法指定。 如果Comparator
尚未指定, Comparator
由归国Collator.getInstance()
上使用调用的结果toString
于底层对象。 Comparator
从未通过null
。 null
值被视为在非null
值之前发生,并且两个null
值被认为是相等的。
如果您指定一个Comparator
将其参数转换为型号以外的类型,则在数据排序时将抛出ClassCastException
。
除了排序, DefaultRowSorter
提供了过滤行的能力。 过滤通过的方式进行RowFilter
正在使用指定的setRowFilter
方法。 如果没有指定过滤器,则包括所有行。
默认情况下,行以未排序的顺序(与模型相同),每列可排序。 默认的Comparator
被记录在子类中(例如TableRowSorter
)。
如果底层模型结构发生变化(调用了modelStructureChanged
方法),则以下内容将重置为默认值: Comparator
s按列,当前排序顺序以及每列是否可排序。 要找到默认的Comparator
s,请参阅具体实现(例如TableRowSorter
)。 默认排序顺序是未排序的(与模型相同),列可默认排序。
如果底层模型结构发生变化(调用modelStructureChanged
方法),则以下内容将重置为默认值: Comparator
,按列,当前排序顺序以及列是否可排序。
DefaultRowSorter
是一个抽象类。 具体的子类必须通过调用setModelWrapper
来提供对底层数据的setModelWrapper
。 在调用setModelWrapper
函数之后, 必须尽快调用setModelWrapper
方法,理想情况下是从子类的构造函数中调用。 将导致未定义的行为,如果您使用的是DefaultRowSorter
而不指定ModelWrapper
。
DefaultRowSorter
具有两种形式类型参数。 第一个类型参数对应于模型的类,例如DefaultTableModel
。 第二种类型的参数对应于类传递到所述标识符的RowFilter
。 请参阅TableRowSorter
和RowFilter
对类型参数的详细信息。
TableRowSorter
, DefaultTableModel
, Collator
Modifier and Type | Class and Description |
---|---|
protected static class |
DefaultRowSorter.ModelWrapper<M,I>
DefaultRowSorter.ModelWrapper 负责提供按
DefaultRowSorter 排序的
DefaultRowSorter 。
|
RowSorter.SortKey
Constructor and Description |
---|
DefaultRowSorter()
创建一个空的
DefaultRowSorter 。
|
Modifier and Type | Method and Description |
---|---|
void |
allRowsChanged()
当底层模型的内容完全改变时调用。
|
int |
convertRowIndexToModel(int index)
根据底层模型返回
index 的位置。
|
int |
convertRowIndexToView(int index)
在视图方面返回
index 的位置。
|
Comparator<?> |
getComparator(int column)
返回
Comparator 指定列。
|
int |
getMaxSortKeys()
返回最大排序键数。
|
M |
getModel()
返回底层模型。
|
int |
getModelRowCount()
返回底层模型中的行数。
|
protected DefaultRowSorter.ModelWrapper<M,I> |
getModelWrapper()
返回提供正在排序和过滤的数据的模型包装器。
|
RowFilter<? super M,? super I> |
getRowFilter()
返回确定哪些行(如果有的话)应该从视图中隐藏的过滤器。
|
List<? extends RowSorter.SortKey> |
getSortKeys()
返回当前的排序键。
|
boolean |
getSortsOnUpdates()
如果在更新底层模型时发生排序,则返回true;
否则返回false。
|
int |
getViewRowCount()
返回视图中的行数。
|
boolean |
isSortable(int column)
如果指定的列是可排序的,则返回true;
否则,假。
|
void |
modelStructureChanged()
当底层模型结构完全改变时调用。
|
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)
返回在进行排序比较之前是否将该值转换为字符串。
|
addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListener
protected final void setModelWrapper(DefaultRowSorter.ModelWrapper<M,I> modelWrapper)
modelWrapper
- 模型包装器,负责提供经过排序和过滤的数据
IllegalArgumentException
- 如果
modelWrapper
是
null
protected final DefaultRowSorter.ModelWrapper<M,I> getModelWrapper()
public void setSortable(int column, boolean sortable)
toggleSortOrder
被调用。
仍然可以通过直接设置排序键对已经标记为不可调整的列进行排序。
默认值为true。
column
- 根据底层模型启用或禁用排序的列
sortable
- 指定列是否可排序
IndexOutOfBoundsException
- 如果
column
超出了模型的范围
toggleSortOrder(int)
,
setSortKeys(java.util.List<? extends javax.swing.RowSorter.SortKey>)
public boolean isSortable(int column)
column
- 根据底层模型检查排序的列
IndexOutOfBoundsException
- 如果列超出了底层模型的范围
public void setSortKeys(List<? extends RowSorter.SortKey> sortKeys)
List
的副本;
随后更改提供的List
不影响此DefaultRowSorter
。
如果排序键已更改,则会触发排序。
setSortKeys
在
RowSorter<M>
sortKeys
- 全新SortKeys
;
null
是指定空列表的缩写,表示视图应该是未排序的
IllegalArgumentException
-如果有的话中的值的
sortKeys
都为空或具有模式的范围之外的列索引
public List<? extends RowSorter.SortKey> getSortKeys()
non-null List
。
如果您需要更改排序键,请复制返回的List
,并复制并使用新列表调用setSortKeys
。
getSortKeys
在
RowSorter<M>
public void setMaxSortKeys(int max)
setMaxSortKeys(2)
。
用户单击列1的标题,导致根据列1中的项排序表行。接下来,用户单击列2的标题,导致根据列2中的项排序表;
如果第2列中的任何项目相等,那么这些特定的行是根据第1列中的项目进行排序的。在这种情况下,我们说这些行主要在第2列中排序,其次是第1列。如果用户点击列3的标题,则这些项目主要在第3列上进行排序,并在第2列进行二次排序。由于使用setMaxSortKeys
将排序键的最大数量设置为2, setMaxSortKeys
列1不再对订单产生影响。
最大排序键数由toggleSortOrder
执行。 您可以通过直接调用setSortKeys
指定更多的排序键,它们都将被保留。 然而,如果toggleSortOrder
调用toggleSortOrder
,则将强制执行最大排序键数。 默认值为3。
max
- 排序键的最大数量
IllegalArgumentException
- 如果
max
<1
public int getMaxSortKeys()
public void setSortsOnUpdates(boolean sortsOnUpdates)
rowsUpdated
)。
例如,如果这是真的并且用户编辑一个条目,该视图中该项目的位置可能会改变。
默认值为false。
sortsOnUpdates
- 是否对更新事件进行排序
public boolean getSortsOnUpdates()
public void setRowFilter(RowFilter<? super M,? super I> filter)
null
表示应包含模型中的所有值。
RowFilter
的include
方法传递的Entry
封装了底层模型。 在列数Entry
对应于列在数量ModelWrapper
。 标识符也来自ModelWrapper
。
此方法触发排序。
filter
- 用于确定应包括哪些条目的过滤器
public RowFilter<? super M,? super I> getRowFilter()
public void toggleSortOrder(int column)
toggleSortOrder
在
RowSorter<M>
column
- 根据底层模型制作主排序列的列的索引
IndexOutOfBoundsException
- 如果列超出了底层模型的范围
setSortable(int,boolean)
,
setMaxSortKeys(int)
public int convertRowIndexToView(int index)
index
的位置。
也就是说,对于底层模型的坐标中的行index
,返回视图的行索引。
convertRowIndexToView
在
RowSorter<M>
index
- 底层模型的行索引
IndexOutOfBoundsException
- 如果
index
在模型的范围之外
public int convertRowIndexToModel(int index)
index
的位置。
也就是说,对于视图index
中的行index
,这将返回基于模型的行索引。
convertRowIndexToModel
在
RowSorter<M>
index
- 底层视图中的行索引
IndexOutOfBoundsException
- 如果
index
在视图的范围之外
public void sort()
sortKeys
列表表示视图应该不排序,与模型相同。
protected boolean useToString(int column)
ModelWrapper.getStringValueAt
将被使用,否则ModelWrapper.getValueAt
将被使用。
它是由子类,如TableRowSorter
,兑现他们这个值ModelWrapper
实现。
column
- 根据底层模型测试的列的索引
IndexOutOfBoundsException
- 如果
column
无效
public void setComparator(int column, Comparator<?> comparator)
Comparator
在排序指定列时使用。
这不会触发排序。
如果要在设置比较器后进行排序,则需要显式调用sort
。
column
-列的索引
Comparator
是用于,在底层模型而言
comparator
-
Comparator
使用
IndexOutOfBoundsException
- 如果
column
在基础模型的范围之外
public Comparator<?> getComparator(int column)
Comparator
指定列。
这将返回null
如果Comparator
尚未为列指定。
column
-列去取
Comparator
的,在底层模型而言
Comparator
指定列
IndexOutOfBoundsException
- 如果列超出了底层模型的范围
public int getViewRowCount()
getViewRowCount
在
RowSorter<M>
RowSorter.getModelRowCount()
public int getModelRowCount()
getModelRowCount
在
RowSorter<M>
RowSorter.getViewRowCount()
public void modelStructureChanged()
TableModel
中的列数改变了,则会调用此方法。
通常不会调用此方法。 这种方法是公开的,允许视图类调用它。
modelStructureChanged
在
RowSorter<M>
类
public void allRowsChanged()
通常不会调用此方法。 这种方法是公开的,允许视图类调用它。
allRowsChanged
在
RowSorter<M>
public void rowsInserted(int firstRow, int endRow)
参数给出了影响范围的指标。 第一个参数是变更前的模型,并且必须小于或等于变更前的模型大小。 第二个参数是改变后的模型,必须小于变更后的模型大小。 例如,如果您有5行模型,并在模型的末尾添加3个项目,那么索引为5,7。
通常不会调用此方法。 这种方法是公开的,允许视图类调用它。
rowsInserted
在
RowSorter<M>
类
firstRow
- 第一行
endRow
- 最后一行
IndexOutOfBoundsException
- 如果任一参数无效,或
firstRow
>
endRow
public void rowsDeleted(int firstRow, int endRow)
这些参数给出了影响范围的指标,并且是在变化前的模型。 例如,如果您有5行模型,并从模型末尾删除3个项目,则索引为2,4。
通常不会调用此方法。 这种方法是公开的,允许视图类调用它。
rowsDeleted
在
RowSorter<M>
firstRow
- 第一行
endRow
- 最后一行
IndexOutOfBoundsException
- 如果任一参数超出变更前模型的范围,或者
firstRow
>
endRow
public void rowsUpdated(int firstRow, int endRow)
通常不会调用此方法。 这种方法是公开的,允许视图类调用它。
rowsUpdated
在
RowSorter<M>
firstRow
- 第一行,在底层模型方面
endRow
- 根据底层模型的最后一行
IndexOutOfBoundsException
- 如果任一参数超出了基础模型的范围,或者
firstRow
>
endRow
public void rowsUpdated(int firstRow, int endRow, int column)
通常不会调用此方法。 这种方法是公开的,允许视图类调用它。
rowsUpdated
在
RowSorter<M>
firstRow
- 第一行,在底层模型方面
endRow
- 根据底层模型的最后一行
column
- 在底层模型方面已经改变的列
IndexOutOfBoundsException
- 如果任何一个参数在更改后的基础模型的范围之外,
firstRow
>
endRow
或
column
在基础模型的范围之外