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

クラスDefaultRowSorter<M,I>

  • 型パラメータ:
    M - モデルの型
    I - RowFilterに渡される識別子の型
    直系の既知のサブクラス:
    TableRowSorter

    public abstract class DefaultRowSorter<M,I>
    extends RowSorter<M>
    グリッド・ベースのデータ・モデルのソートやフィルタの適用を行うRowSorterの実装です。 作成時やインストール時以外に、RowSorterと直接やりとりする必要はほとんどありません。 JTableRowSorterの具象実装については、TableRowSorterを参照してください。

    ソートは、現在のSortKeyに基づいて順番に行われます。 2つのオブジェクトが同等である(列のComparatorが0を返す)場合、次のSortKeyが使用されます。 SortKeyが残っていない、または順序がUNSORTEDの場合、モデル内の行の順序が使用されます。

    各列のソートは、setComparatorメソッドをにより指定可能なComparatorによって行われます。 Comparatorが指定されていない場合は、配下のオブジェクト上にtoStringを呼び出した結果に対して、Collator.getInstance()から返されるComparatorが使用されます。 Comparatornullが渡されることはありません。 null値はnull以外の値の前に検出されたものとして処理されます。2つのnull値は同等と見なされます。

    引数を、モデルによって提供されるその他の型にキャストするComparatorを指定した場合、データをソートするとClassCastExceptionがスローされます。

    DefaultRowSorterは、ソート機能のほかに、行のフィルタ機能も提供します。 フィルタは、setRowFilterメソッドで指定されたRowFilterによって行われます。 フィルタが指定されていない場合、すべての行が含まれます。

    デフォルトでは、行はソートされず(モデルと同様)、すべての列がソート可能です。 デフォルトのComparatorは、TableRowSorterのように、サブクラスにドキュメント化されています。

    配下のモデルの構造が変化した場合(modelStructureChangedメソッドが呼び出された場合)、列のComparator、現在のソート順序、および各列がソート可能であるかどうかの設定がリセットされ、デフォルト値に戻ります。 デフォルトのComparatorを検出するには、具象実装(たとえば、TableRowSorter)を参照します。 デフォルトではソートは行われず(モデルと同様)、列はソート可能です。

    DefaultRowSorterはabstractクラスです。 具象サブクラスは、setModelWrapperを呼び出して、配下のデータへのアクセスを提供する必要があります。 setModelWrapperメソッドは、コンストラクタの呼出し直後に呼び出す必要があります。可能であれば、サブクラスのコンストラクタ内で呼び出します。 ModelWrapperを指定しないで DefaultRowSorterを使用した場合、結果は保証されません。

    DefaultRowSorterには2つの正式な型パラメータがあります。 1つめの型パラメータは、DefaultTableModelなど、モデルのクラスに対応しています。 もう1つの型パラメータは、RowFilterに渡される識別子のクラスに対応しています。 型パラメータの詳細は、TableRowSorterRowFilterを参照してください。

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

      ネストされたクラス 
      修飾子と型 クラス 説明
      protected static class  DefaultRowSorter.ModelWrapper<M,I>
      DefaultRowSorter.ModelWrapperは、DefaultRowSorterでソートされるデータを提供します。
    • コンストラクタのサマリー

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

      すべてのメソッド インスタンス・メソッド 具象メソッド 
      修飾子と型 メソッド 説明
      int convertRowIndexToModel​(int index)
      配下のモデルに基づいてindexの位置を返します。
      int convertRowIndexToView​(int index)
      ビューに基づいてindexの位置を返します。
      Comparator<?> getComparator​(int column)
      指定された列のComparatorを返します。
      int getMaxSortKeys()
      ソート・キーの最大数を返します。
      M getModel()
      配下のモデルを返します。
      protected DefaultRowSorter.ModelWrapper<M,I> getModelWrapper()
      ソートおよびフィルタの適用対象のデータを提供するモデル・ラッパーを返します。
      RowFilter<? super M,? super I> getRowFilter()
      必要に応じてビューに表示しない行を指定するフィルタを返します。
      List<? extends RowSorter.SortKey> getSortKeys()
      現在のソート・キーを返します。
      boolean getSortsOnUpdates()
      配下のモデルの更新時にソートを行う場合はtrue、そうでない場合はfalseを返します。
      boolean isSortable​(int column)
      指定された列がソート可能な場合はtrue、そうでない場合はfalseを返します。
      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)
      指定された列が第1のソート列であった場合、ソート順序を昇順から降順へ、または降順から昇順へ切り替えます。そうでない場合は、指定の列を第1のソート列(昇順)に変更します。
      protected boolean useToString​(int column)
      ソート時に比較を行う前に、値を文字列に変換するかどうかを返します。
    • コンストラクタの詳細

      • 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()
        配下のモデルを返します。
        定義:
        getModel、クラス: RowSorter<M>
        戻り値:
        配下のモデル
      • setSortable

        public void setSortable​(int column,
                                boolean sortable)
        指定された列をソート可能にするかどうかを設定します。 指定された値は、toggleSortOrderが呼び出されたときだけチェックされます。 ソート不可能とマークされている列でも、ソート・キーを直接設定することでソートできます。 デフォルトはtrueです。
        パラメータ:
        column - 配下のモデルに基づいて、ソートを有効または無効にする列
        sortable - 指定された列がソート可能であるかどうか
        例外:
        IndexOutOfBoundsException - columnがモデルの範囲外である場合
        関連項目:
        toggleSortOrder(int), setSortKeys(java.util.List<? extends javax.swing.RowSorter.SortKey>)
      • isSortable

        public boolean isSortable​(int column)
        指定された列がソート可能な場合はtrue、そうでない場合はfalseを返します。
        パラメータ:
        column - 配下のモデルに基づいて、ソートを調べる列
        戻り値:
        列がソート可能な場合はtrue
        例外:
        IndexOutOfBoundsException - columnが配下のモデルの範囲外である場合
      • setSortKeys

        public void setSortKeys​(List<? extends RowSorter.SortKey> sortKeys)
        ソート・キーを設定します。 これにより、指定されたListのコピーが作成されます。その後、指定されたListに変更を加えても、このDefaultRowSorterに影響はありません。 ソート・キーが変更された場合、これがソートをトリガーします。
        定義:
        setSortKeys、クラス: RowSorter<M>
        パラメータ:
        sortKeys - 新規のSortKeys。空のリスト(このビューではソートを行わないことを示す)を指定する場合はnull
        例外:
        IllegalArgumentException - sortKeysに、null値やモデルの範囲外の列インデックスを持つ値がある場合
      • getSortKeys

        public List<? extends RowSorter.SortKey> getSortKeys()
        現在のソート・キーを返します。 変更不可能なnon-null Listが返されます。 ソート・キーを変更する必要がある場合は、返されたListのコピーを作成し、このコピーを変更して作成した新しいリストを使って、setSortKeysを呼び出します。
        定義:
        getSortKeys、クラス: RowSorter<M>
        戻り値:
        現在のソート順序
      • setMaxSortKeys

        public void setMaxSortKeys​(int max)
        ソート・キーの最大数を設定します。 ソート・キーの数により、ソート時に同じ値がどのように処理されるかが決定されます。 たとえば、表の行のソーターを作成し、その上でsetMaxSortKeys(2)を呼び出すとします。 ユーザーが列1のヘッダーをクリックすると、列1の項目に基づいて表の行がソートされます。 次に、ユーザーが列2のヘッダーをクリックすると、列2の項目に基づいて表がソートされます。列2に同じ値の項目がある場合、これらの行の順序は列1の項目に基づいて決定されます。 この場合、行は列2を最優先にソートされ、列1を次に優先してソートされると言えます。 ユーザーが列3のヘッダーをクリックすると、項目は列3の項目を最優先にソートされ、列2を次に優先してソートされます。 setMaxSortKeysにより、ソート・キーの最大数は2に設定されているので、ソート順序は列1には影響されなくなります。

        ソート・キーの最大数は、toggleSortOrderによって適用されます。 setSortKeysを直接呼び出すと、より多くのソート・キーを指定でき、これらのキーはすべて受け付けられます。 ただし、その後toggleSortOrderが呼び出されると、ソート・キーの最大数が適用されます。 デフォルト値は3です。

        パラメータ:
        max - ソート・キーの最大数
        例外:
        IllegalArgumentException - maxが1未満の場合
      • getMaxSortKeys

        public int getMaxSortKeys()
        ソート・キーの最大数を返します。
        戻り値:
        ソート・キーの最大数
      • setSortsOnUpdates

        public void setSortsOnUpdates​(boolean sortsOnUpdates)
        trueの場合、配下のモデルが更新された(rowsUpdatedが呼び出された)ときにソートを行うことを指定します。 たとえば、この値がtrueの場合、ユーザーがエントリを編集すると、ビュー内の項目の位置が変更されることがあります。 デフォルトは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)
        指定された列が第1のソート列であった場合、ソート順序を昇順から降順へ、または降順から昇順へ切り替えます。そうでない場合は、指定の列を第1のソート列(昇順)に変更します。 指定された列がソート可能でない場合、このメソッドは何の影響も及ぼしません。
        定義:
        toggleSortOrder、クラス: RowSorter<M>
        パラメータ:
        column - 配下のモデルに基づいて、第1のソート列にする列のインデックス
        例外:
        IndexOutOfBoundsException - columnが配下のモデルの範囲外である場合
        関連項目:
        setSortable(int,boolean), setMaxSortKeys(int)
      • convertRowIndexToView

        public int convertRowIndexToView​(int index)
        ビューに基づいてindexの位置を返します。 配下のモデルの座標の行indexに対応する、ビューの行インデックスを返します。
        定義:
        convertRowIndexToView、クラス: RowSorter<M>
        パラメータ:
        index - 配下のモデルの行インデックス
        戻り値:
        ビューの行インデックス。インデックスがビューの範囲外にある場合は -1
        例外:
        IndexOutOfBoundsException - indexがモデルの範囲外である場合
      • convertRowIndexToModel

        public int convertRowIndexToModel​(int index)
        配下のモデルに基づいてindexの位置を返します。 ビューの座標の行indexに対応する、配下のモデルの行インデックスを返します。
        定義:
        convertRowIndexToModel、クラス: RowSorter<M>
        パラメータ:
        index - 配下のビューの行インデックス
        戻り値:
        ビューの行インデックス
        例外:
        IndexOutOfBoundsException - indexがビューの範囲外にある場合
      • useToString

        protected boolean useToString​(int column)
        ソート時に比較を行う前に、値を文字列に変換するかどうかを返します。 trueの場合はModelWrapper.getStringValueAtを使用し、そうでない場合はModelWrapper.getValueAtを使用します。 ModelWrapper実装内でこの値を受け取る、TableRowSorterなどのサブクラスに一致します。
        パラメータ:
        column - 配下のモデルに基づいて、テストする列のインデックス
        戻り値:
        ソート時に比較を行う前に値を文字列に変換する場合はtrue
        例外:
        IndexOutOfBoundsException - columnが有効でない場合
      • setComparator

        public void setComparator​(int column,
                                  Comparator<?> comparator)
        指定された列のソート時に使用するComparatorを設定します。 これは、ソートをトリガーしません。 Comparatorの設定後にソートを行うには、明示的にsortを呼び出す必要があります。
        パラメータ:
        column - 配下のモデルに基づいて、Comparatorを使用する列のインデックス
        comparator - 使用するComparator
        例外:
        IndexOutOfBoundsException - columnが配下のモデルの範囲外である場合
      • getComparator

        public Comparator<?> getComparator​(int column)
        指定された列のComparatorを返します。 これは、列にComparatorが指定されていない場合、nullを返します。
        パラメータ:
        column - 配下のモデルに基づいて、Comparatorをフェッチする列
        戻り値:
        指定された列のComparator
        例外:
        IndexOutOfBoundsException - columnが配下のモデルの範囲外である場合
      • rowsInserted

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

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

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

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

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

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

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

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

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

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

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

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

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

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