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, removeRowSorterListenerprotected 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在基础模型的范围之外 
            Submit a bug or feature 
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
 Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.