モジュール java.desktop
パッケージ javax.swing

クラスRowSorter<M>

  • 型パラメータ:
    M - 配下のモデルのタイプ
    直系の既知のサブクラス:
    DefaultRowSorter

    public abstract class RowSorter<M>
    extends Object
    RowSorterは、ソートとフィルタの基盤を提供します。 作成時やインストール時以外に、RowSorterと直接やりとりする必要はほとんどありません。 JTableRowSorterの具象実装については、TableRowSorterを参照してください。

    RowSorterの基本機能は、ビュー(JTableなど)の座標系と配下のデータ・ソース(通常はモデル)の座標系の間でマッピングを行うことです。

    ビューは、RowSorter上で次のメソッドを呼び出します。

    • toggleSortOrder - 適切なユーザー・ジェスチャが発生してソートがトリガーされたときにビューにより呼び出されます。 たとえば、ユーザーがテーブル内の列ヘッダーをクリックしたときなどに呼び出されます。
    • モデル変更メソッド - 配下のモデルが変更されたときにビューによりモデル変更メソッドが呼び出されます。 イベントの配信順序には依存関係があります。このため、これらのメソッドのいずれかが呼び出されるまで、RowSorterがマッピングを更新しないようにしてください。
    ビューはconvertRowIndexToModelメソッド、convertRowIndexToViewメソッド、およびgetViewRowCountメソッドを非常によく使用するので、これらのメソッドは高速である必要があります。

    RowSorterは、RowSorterListenerを使って変更の通知を行います。 通知には、次の2種類があります。

    • RowSorterEvent.Type.SORT_ORDER_CHANGED - ソート順序が変更されたことをリスナーに通知します。 通常、このあとに、ソートが変更されたという通知が送信されます。
    • RowSorterEvent.Type.SORTED - RowSorterが管理しているマッピングが変更されたことをリスナーに通知します。
    RowSorter実装と配下のモデルのマッピングは、通常、1対1にはなっていませんが、1対1にすることも可能です。 たとえば、ソートを行うデータベースは、バックグラウンド・スレッド上でtoggleSortOrderを呼び出します。このメソッドは、マッピング・メソッドをオーバーライドして、渡された引数を返します。

    RowSorterの具象実装は、TableModelListModelなどのモデルを参照する必要があります。 JTableJListなどのビュー・クラスも、モデルを参照します。 順序の依存性を回避するため、RowSorter実装がモデル上にリスナーをインストールしないようにしてください。 モデルが変更されると、ビュー・クラスがRowSorterを呼び出します。 たとえば、TableModel JTableで行が更新された場合、rowsUpdatedが呼び出されます。 モデルが変更されると、ビューは、modelStructureChangedallRowsChangedrowsInsertedrowsDeletedrowsUpdatedのいずれかのメソッドを呼び出します。

    導入されたバージョン:
    1.6
    関連項目:
    TableRowSorter
    • ネストされたクラスのサマリー

      ネストされたクラス 
      修飾子と型 クラス 説明
      static class  RowSorter.SortKey
      SortKeyは、特定の列のソート順序を記述します。
    • コンストラクタのサマリー

      コンストラクタ 
      コンストラクタ 説明
      RowSorter()
      RowSorterを作成します。
    • メソッドのサマリー

      すべてのメソッド インスタンス・メソッド 抽象メソッド 具象メソッド 
      修飾子と型 メソッド 説明
      void addRowSorterListener​(RowSorterListener l)
      このRowSorterに関する通知を受け取るRowSorterListenerを追加します。
      abstract void allRowsChanged()
      配下のモデルのコンテンツが完全に変更された場合に呼び出されます。
      abstract int convertRowIndexToModel​(int index)
      配下のモデルに基づいてindexの位置を返します。
      abstract int convertRowIndexToView​(int index)
      ビューに基づいてindexの位置を返します。
      protected void fireRowSorterChanged​(int[] lastRowIndexToModel)
      マッピングが変更されたことをリスナーに通知します。
      protected void fireSortOrderChanged()
      ソート順序が変更されたことをリスナーに通知します。
      abstract M getModel()
      配下のモデルを返します。
      abstract int getModelRowCount()
      配下のモデルの行数を返します。
      abstract List<? extends RowSorter.SortKey> getSortKeys()
      現在のソート・キーを返します。
      abstract int getViewRowCount()
      ビュー内の行数を返します。
      abstract void modelStructureChanged()
      配下のモデルの構造が完全に変更された場合に呼び出されます。
      void removeRowSorterListener​(RowSorterListener l)
      RowSorterListenerを削除します。
      abstract void rowsDeleted​(int firstRow, int endRow)
      配下のモデルの指定された範囲(上限値と下限値を含む)から行が削除された場合に呼び出されます。
      abstract void rowsInserted​(int firstRow, int endRow)
      配下のモデルの指定された範囲(上限値と下限値を含む)に行が挿入された場合に呼び出されます。
      abstract void rowsUpdated​(int firstRow, int endRow)
      配下のモデルの指定された範囲(上限値と下限値を含む)で行が変更された場合に呼び出されます。
      abstract void rowsUpdated​(int firstRow, int endRow, int column)
      配下のモデルの指定された範囲で行内の列が更新された場合に呼び出されます。
      abstract void setSortKeys​(List<? extends RowSorter.SortKey> keys)
      現在のソート・キーを設定します。
      abstract void toggleSortOrder​(int column)
      指定された列のソート順序を逆にします。
    • コンストラクタの詳細

      • RowSorter

        public RowSorter()
        RowSorterを作成します。
    • メソッドの詳細

      • getModel

        public abstract M getModel()
        配下のモデルを返します。
        戻り値:
        配下のモデル
      • toggleSortOrder

        public abstract void toggleSortOrder​(int column)
        指定された列のソート順序を逆にします。 呼び出されたときにこのとおりの動作が得られるかどうかは、サブクラスによって決まります。 通常、指定された列がプライマリのソート列であった場合、ソート順序を昇順から降順へ、または降順から昇順へ切り替えます。そうでない場合は、指定の列をプライマリのソート列(昇順)に変更します。 指定された列がソート可能でない場合、このメソッドは何の影響も及ぼしません。

        このメソッドによってソート順序が変更され、ソートが行われる場合は、適切なRowSorterListener通知が送信されます。

        パラメータ:
        column - 配下のモデルに基づいて、ソート順序を切り替える列
        例外:
        IndexOutOfBoundsException - columnが配下のモデルの範囲外である場合
      • 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で列数が変更された場合に、このメソッドが呼び出されます。

        通常、ユーザーがこのメソッドを呼び出すことはありません。 このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。

      • allRowsChanged

        public abstract void allRowsChanged()
        配下のモデルのコンテンツが完全に変更された場合に呼び出されます。 変更されたのはコンテンツだけであり、テーブルの構造は変わりません。 これは、通常、その他のメソッドでは指定できないような過度の変更があった場合に送信されます。

        通常、ユーザーがこのメソッドを呼び出すことはありません。 このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。

      • rowsInserted

        public abstract void rowsInserted​(int firstRow,
                                          int endRow)
        配下のモデルの指定された範囲(上限値と下限値を含む)に行が挿入された場合に呼び出されます。

        対象となる範囲のインデックスは、引数で指定します。 第1の引数は、変更前のモデルを基にしており、変更前のモデルのサイズ以下である必要があります。 第2の引数は、変更後のモデルを基にしており、変更後のモデルのサイズ未満である必要があります。 たとえば5行のモデルの末尾に3項目を追加する場合、インデックスは5,7になります。

        通常、ユーザーがこのメソッドを呼び出すことはありません。 このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。

        パラメータ:
        firstRow - 最初の行
        endRow - 最後の行
        例外:
        IndexOutOfBoundsException - いずれかの引数が無効である場合、またはfirstRowのほうがendRowよりも大きい場合
      • rowsDeleted

        public abstract void rowsDeleted​(int firstRow,
                                         int endRow)
        配下のモデルの指定された範囲(上限値と下限値を含む)から行が削除された場合に呼び出されます。

        対象となる範囲のインデックスは、変更のモデルを表す引数で指定します。 たとえば5行のモデルの末尾から3項目を削除する場合、インデックスは2,4になります。

        通常、ユーザーがこのメソッドを呼び出すことはありません。 このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。

        パラメータ:
        firstRow - 最初の行
        endRow - 最後の行
        例外:
        IndexOutOfBoundsException - どちらかの引数が変更前のモデルの範囲外にある場合、またはfirstRowのほうがendRowより大きい場合
      • rowsUpdated

        public abstract void rowsUpdated​(int firstRow,
                                         int endRow)
        配下のモデルの指定された範囲(上限値と下限値を含む)で行が変更された場合に呼び出されます。

        通常、ユーザーがこのメソッドを呼び出すことはありません。 このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。

        パラメータ:
        firstRow - 配下のモデルの最初の行
        endRow - 配下のモデルの最後の行
        例外:
        IndexOutOfBoundsException - どちらかの引数が配下のモデルの範囲外にある場合、またはfirstRowのほうがendRowより大きい場合
      • rowsUpdated

        public abstract void rowsUpdated​(int firstRow,
                                         int endRow,
                                         int column)
        配下のモデルの指定された範囲で行内の列が更新された場合に呼び出されます。

        通常、ユーザーがこのメソッドを呼び出すことはありません。 このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。

        パラメータ:
        firstRow - 配下のモデルの最初の行
        endRow - 配下のモデルの最後の行
        column - 配下のモデルで変更された列
        例外:
        IndexOutOfBoundsException - どちらかの引数が変更後の配下のモデルの範囲外にある場合、firstRowのほうがendRowより大きい場合、またはcolumnが配下のモデルの範囲外にある場合
      • addRowSorterListener

        public void addRowSorterListener​(RowSorterListener l)
        このRowSorterに関する通知を受け取るRowSorterListenerを追加します。 同じリスナーを複数追加した場合、複数の通知を受け取ることになります。 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