Module  java.desktop
软件包  javax.swing

Class RowSorter<M>

  • 参数类型
    M - 底层模型的类型
    已知直接子类:
    DefaultRowSorter


    public abstract class RowSorter<M>
    extends Object
    RowSorter为排序和筛选提供依据。 除了创建和安装一个RowSorter ,你很少需要直接与一个人交互。 请参阅TableRowSorter的具体实施RowSorterJTable

    RowSorter的主要作用是提供两个坐标系之间的映射:视图(例如JTable )和基础数据源(通常是模型)的映射。

    该视图在RowSorter上调用以下方法:

    • toggleSortOrder当出现适当的用户手势触发排序时,该视图会调用此视图。 例如,用户单击表中的列标题。
    • 模型更改方法之一 - 当底层模型发生变化时,视图调用模型更改方法。 事件的传递方式可能有顺序依赖关系,所以RowSorter不应该更新其映射,直到调用这些方法之一为止。
    因为视图大量使用的convertRowIndexToModelconvertRowIndexToViewgetViewRowCount方法,这些方法都需要要快。

    RowSorter提供了方式变化的通知RowSorterListener 发送两种类型的通知:

    • RowSorterEvent.Type.SORT_ORDER_CHANGED “通知听众排序顺序已更改。 这通常是通知,排序已更改。
    • RowSorterEvent.Type.SORTED “通知听众,由RowSorter维护的映射已经以某种方式发生了变化。
    RowSorter实现通常与底层模型没有一对一的映射,但是它们可以。 例如,如果数据库进行排序,则toggleSortOrder可能会调用数据库(在后台线程中),并覆盖映射方法以返回传入的参数。

    RowSorter具体实现需要引用一个模型,如TableModelListModel 视图类,如JTableJList ,也将引用模型。 为避免排序相关性, RowSorter实现不应该在模型上安装监听器。 相反,视图类会在模型更改时调用RowSorter 例如,如果在TableModel JTable更新一行,则调用rowsUpdated 当模型改变,视图可以调用到任何下列方法之一: modelStructureChangedallRowsChangedrowsInsertedrowsDeletedrowsUpdated

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

      • RowSorter

        public RowSorter​()
        创建一个 RowSorter
    • 方法详细信息

      • getModel

        public abstract M getModel​()
        返回底层模型。
        结果
        底层模型
      • toggleSortOrder

        public abstract void toggleSortOrder​(int column)
        反转指定列的排序顺序。 子类在调用时提供确切的行为。 通常,如果指定的列已经是主排序列,则这会将排序顺序从升序转换为降序(或降序升序) 否则,使指定的列成为主排序列,具有升序的排序顺序。 如果指定的列不可排序,则此方法无效。

        如果这导致更改排序顺序和排序,将会发送相应的RowSorterListener通知。

        参数
        column - 根据底层模型切换排序顺序的列
        异常
        IndexOutOfBoundsException - 如果列超出了底层模型的范围
      • convertRowIndexToModel

        public abstract int convertRowIndexToModel​(int index)
        根据底层模型返回index的位置。 也就是说,对于视图坐标中的行index ,这将返回基于模型的行索引。
        参数
        index - 根据底层视图的行索引
        结果
        行索引在视图方面
        异常
        IndexOutOfBoundsException - 如果 index在视图的范围之外
      • convertRowIndexToView

        public abstract int convertRowIndexToView​(int index)
        在视图方面返回index的位置。 也就是说,对于底层模型的坐标中的行index ,这将返回视图的行索引。
        参数
        index - 基础模型的行索引
        结果
        视图中的行索引,如果索引已从视图中过滤出来,则为-1
        异常
        IndexOutOfBoundsException - 如果 index在模型的范围之外
      • setSortKeys

        public abstract void setSortKeys​(List<? extends RowSorter.SortKey> keys)
        设置当前的排序键。
        参数
        keys - 新SortKeys ; null是指定空列表的缩写,表示视图应该是未排序的
      • getSortKeys

        public abstract List<? extends RowSorter.SortKey> getSortKeys​()
        返回当前的排序键。 这必须返回一个non-null List并可能会返回一个不可修改的List 如果您需要更改排序键,请复制所返回的List ,并复制副本并使用新列表调用setSortKeys
        结果
        当前排序顺序
      • getViewRowCount

        public abstract int getViewRowCount​()
        返回视图中的行数。 如果内容已被过滤,这可能与底层模型的行数有所不同。
        结果
        视图中的行数
        另请参见:
        getModelRowCount()
      • getModelRowCount

        public abstract int getModelRowCount​()
        返回底层模型中的行数。
        结果
        底层模型中的行数
        另请参见:
        getViewRowCount()
      • modelStructureChanged

        public abstract void modelStructureChanged​()
        当底层模型结构完全改变时调用。 例如,如果TableModel的列数更改,则将调用此方法。

        通常不会调用此方法。 这种方法是公开的,允许视图类调用它。

      • allRowsChanged

        public abstract void allRowsChanged​()
        当底层模型的内容完全改变时调用。 表的结构是一样的,只有内容已经改变了。 这通常是在太贵的情况下发送的,以表征其他方法的变化。

        通常不会调用此方法。 这种方法是公开的,允许视图类调用它。

      • rowsInserted

        public abstract void rowsInserted​(int firstRow,
                                          int endRow)
        当行已经在指定范围(包括)中插入到底层模型中时调用。

        参数给出了影响范围的指标。 第一个参数是变更前的模型,并且必须小于或等于变更前的模型大小。 第二个参数是改变后的模型,必须小于变更后的模型大小。 例如,如果您有5行模型,并在模型的末尾添加3个项目,那么索引为5,7。

        通常不会调用此方法。 这种方法是公开的,允许视图类调用它。

        参数
        firstRow - 第一行
        endRow - 最后一行
        异常
        IndexOutOfBoundsException - 如果任一参数无效,或 firstRow > endRow
      • rowsDeleted

        public abstract void rowsDeleted​(int firstRow,
                                         int endRow)
        当从指定范围(含)的底层模型中删除行时调用。

        这些参数给出了影响范围的指标,并且是在变化的模型。 例如,如果您有5行模型,并从模型末尾删除3个项目,则索引为2,4。

        通常不会调用此方法。 这种方法是公开的,允许视图类调用它。

        参数
        firstRow - 第一行
        endRow - 最后一行
        异常
        IndexOutOfBoundsException - 如果任一参数超出变更前模型的范围,或者 firstRow > endRow
      • rowsUpdated

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

        通常不会调用此方法。 这种方法是公开的,允许视图类调用它。

        参数
        firstRow - 第一行,在底层模型方面
        endRow - 根据底层模型的最后一行
        异常
        IndexOutOfBoundsException - 如果任一参数超出了基础模型的范围,或者 firstRow > endRow
      • rowsUpdated

        public abstract void rowsUpdated​(int firstRow,
                                         int endRow,
                                         int column)
        当行中的列在指定范围内的底层模型中更新时调用。

        通常不会调用此方法。 这种方法是公开的,允许视图类调用它。

        参数
        firstRow - 第一行,在底层模型方面
        endRow - 根据底层模型的最后一行
        column - 根据底层模型改变的列
        异常
        IndexOutOfBoundsException - 如果任何一个参数在更改后的基础模型的范围之外, firstRow endRowcolumncolumn不在基础模型的范围之内
      • addRowSorterListener

        public void addRowSorterListener​(RowSorterListener l)
        添加RowSorterListener以接收有关此RowSorter通知。 如果同一个监听器被多次添加,它将收到多个通知。 如果lnull没有做任何事情。
        参数
        l - RowSorterListener
      • removeRowSorterListener

        public void removeRowSorterListener​(RowSorterListener l)
        删除一个RowSorterListener 如果lnull没有做任何事情。
        参数
        l - RowSorterListener
      • fireSortOrderChanged

        protected void fireSortOrderChanged​()
        通知侦听器排序顺序已更改。
      • fireRowSorterChanged

        protected void fireRowSorterChanged​(int[] lastRowIndexToModel)
        通知侦听器映射已更改。
        参数
        lastRowIndexToModel - 在排序之前从模型索引到查看索引的映射可能为 null