模块  java.desktop
软件包  javax.swing

Class DefaultRowSorter<M,​I>

  • 参数类型
    M - 模型的类型
    I - 传递给 RowFilter的标识符的类型
    已知直接子类:
    TableRowSorter

    public abstract class DefaultRowSorter<M,​I>
    extends RowSorter<M>
    RowSorter的实现,提供围绕基于网格的数据模型的排序和过滤。 除了创建和安装RowSorter ,您很少需要直接与其进行交互。 请参阅TableRowSorter的具体实施RowSorterJTable

    按顺序基于当前的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的标识符的类。 有关类型参数的更多详细信息,请参阅TableRowSorterRowFilter

    从以下版本开始:
    1.6
    另请参见:
    TableRowSorterDefaultTableModelCollator
    • 构造方法详细信息

      • DefaultRowSorter

        public DefaultRowSorter()
        创建一个空 DefaultRowSorter
    • 方法详细信息

      • setModelWrapper

        protected final void setModelWrapper​(DefaultRowSorter.ModelWrapper<M,​I> modelWrapper)
        设置模型包装器,提供正在排序和筛选的数据。
        参数
        modelWrapper - 模型包装器,负责提供已排序和筛选的数据
        异常
        IllegalArgumentException - 如果 modelWrappernull
      • getModelWrapper

        protected final DefaultRowSorter.ModelWrapper<M,​I> getModelWrapper()
        返回提供正在排序和筛选的数据的模型包装器。
        结果
        模型包装器负责提供被排序和过滤的数据
      • getModel

        public final M getModel()
        返回基础模型。
        Specified by:
        getModelRowSorter<M>
        结果
        基础模型
      • isSortable

        public boolean isSortable​(int column)
        如果指定的列是可排序的,则返回true; 否则,是的。
        参数
        column - 根据基础模型检查排序的列
        结果
        如果列是可排序的,则为true
        异常
        IndexOutOfBoundsException - 如果列超出基础模型的范围
      • setSortKeys

        public void setSortKeys​(List<? extends RowSorter.SortKey> sortKeys)
        设置排序键。 这将创建所提供的List的副本; 对提供的List后续更改不会影响此DefaultRowSorter 如果排序键已更改,则触发排序。
        Specified by:
        setSortKeysRowSorter<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表示应包含模型中的所有值。

        RowFilterinclude方法传递了一个包装底层模型的Entry 在列数Entry对应于列在数量ModelWrapper 标识符也来自ModelWrapper

        此方法触发排序。

        参数
        filter - 用于确定应包含哪些条目的过滤器
      • getRowFilter

        public RowFilter<? super M,​? super I> getRowFilter()
        返回用于确定应从视图中隐藏哪些行(如果有)的过滤器。
        结果
        过滤器
      • toggleSortOrder

        public void toggleSortOrder​(int column)
        如果指定的列已经是主要排序列,则将排序顺序从升序转换为降序(或降序为升序); 否则,使指定列成为主要排序列,并按升序排序。 如果指定的列不可排序,则此方法无效。
        Specified by:
        toggleSortOrderRowSorter<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:
        convertRowIndexToModelRowSorter<M>
        参数
        index - 基础视图的行索引
        结果
        视图方面的行索引
        异常
        IndexOutOfBoundsException - 如果 index超出视图范围
      • 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:
        rowsDeletedRowSorter<M>
        参数
        firstRow - 第一行
        endRow - 最后一行
        异常
        IndexOutOfBoundsException - 如果任一参数超出更改前模型的范围,或 firstRow > endRow
      • rowsUpdated

        public void rowsUpdated​(int firstRow,
                                int endRow)
        在指定范围(包括)之间的基础模型中更改行时调用。

        您通常不会调用此方法。 此方法是公共的,以允许视图类调用它。

        Specified by:
        rowsUpdatedRowSorter<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 > endRowcolumn超出基础模型的范围