模块  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 > endRowcolumn超出基础模型的范围
      • 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