クラスTableRowSorter<M extends TableModel>

型パラメータ:
M - モデルのタイプ。TableModelの実装である必要があります

public class TableRowSorter<M extends TableModel> extends DefaultRowSorter<M,Integer>
TableModelを使ってソートおよびフィルタ機能を提供するRowSorterの実装です。 次に示すのは、JTableにソート機能を追加する例です。
  TableModel myModel = createMyTableModel();
  JTable table = new JTable(myModel);
  table.setRowSorter(new TableRowSorter(myModel));
このコードは、ユーザーが適切なジェスチャ(列ヘッダーのクリックなど)を実行したときテーブルが視覚的にソートされるように、接続処理を行います。

JTableの行ベースのメソッドとJTableの選択モデルは、ビューを参照しますが、配下のモデルは参照しません。 したがって、2つの間で変換を行う必要があります。 たとえば、myModelの選択を行う場合は、次のようにインデックスを変換する必要があります。

  int[] selection = table.getSelectedRows();
  for (int i = 0; i < selection.length; i++) {
    selection[i] = table.convertRowIndexToModel(selection[i]);
  }
座標に基づいたJTable内の行を選択するときと同様に、配下のモデルから反対の処理を行います。
  table.setRowSelectionInterval(table.convertRowIndexToView(row),
                                table.convertRowIndexToView(row));

前の例は、フィルタ機能が有効になっていない場合の例です。 フィルタ機能が有効になっている場合、convertRowIndexToViewは、ビューに表示されない場所に対して -1を返します。

TableRowSorterは、比較の際、Comparatorを使用します。 列に対してComparatorを選択する方法は、次のように定義します。

  1. 列のComparatorsetComparatorメソッドを使って指定されている場合は、このメソッドを使用します。
  2. getColumnClassから返される列クラスがStringの場合は、Collator.getInstance()から返されるComparatorを使用します。
  3. 列クラスがComparableを実装する場合は、compareToメソッドを呼び出すComparatorを使用します。
  4. TableStringConverterが指定されている場合は、これを使って値をStringに変換し、Collator.getInstance()から返されるComparatorを使用します。
  5. それ以外の場合は、オブジェクト上でtoStringを呼び出した結果に対して、Collator.getInstance()から返されるComparatorを使用します。

TableRowSorterは、ソート機能のほかにフィルタ機能も提供します。 フィルタの指定には、setFilterメソッドを使用します。 次に示すのは、文字列「foo」を含む行だけを表示する例です。

  TableModel myModel = createMyTableModel();
  TableRowSorter sorter = new TableRowSorter(myModel);
  sorter.setRowFilter(RowFilter.regexFilter(".*foo.*"));
  JTable table = new JTable(myModel);
  table.setRowSorter(sorter);

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

TableRowSorterには、仮型パラメータ(モデルの型)が1つあります。 モデルに正確に対応する型を渡すことにより、キャストなしでモデルに基づいてフィルタを適用することができます。 この例についてはRowFilterの説明を参照してください。

警告: DefaultTableModelObjectの列クラスを返します。 そのため、すべての比較はtoStringを使って行われます。 これは負荷が大きい可能性があります。 列に1つの型(Integerなど)しか含まれない場合は、getColumnClassをオーバーライドして適切なClassを返すようにします。 これにより、このクラスのパフォーマンスが飛躍的に向上します。

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

    クラスDefaultRowSorterで宣言されたネストされたクラス/インタフェース

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

    クラスRowSorterで宣言されたネストされたクラス/インタフェース

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

    コンストラクタ
    コンストラクタ
    説明
    空のモデルでTableRowSorterを作成します。
    modelを配下のTableModelとして使用するTableRowSorterを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    getComparator(int column)
    指定された列のComparatorを返します。
    値をモデルから文字列に変換するために使用するオブジェクトを返します。
    void
    setModel(M model)
    このTableRowSorterの配下のモデルとして使用するTableModelを設定します。
    void
    値をモデルから文字列に変換するために使用するオブジェクトを設定します。
    protected boolean
    useToString(int column)
    ソート時に比較を行う前に、値を文字列に変換するかどうかを返します。

    クラスで宣言されたメソッド DefaultRowSorter

    allRowsChanged, convertRowIndexToModel, convertRowIndexToView, getMaxSortKeys, getModel, getModelRowCount, getModelWrapper, getRowFilter, getSortKeys, getSortsOnUpdates, getViewRowCount, isSortable, modelStructureChanged, rowsDeleted, rowsInserted, rowsUpdated, rowsUpdated, setComparator, setMaxSortKeys, setModelWrapper, setRowFilter, setSortable, setSortKeys, setSortsOnUpdates, sort, toggleSortOrder
    修飾子と型
    メソッド
    説明
    void
    配下のモデルのコンテンツが完全に変更された場合に呼び出されます。
    int
    配下のモデルに基づいてindexの位置を返します。
    int
    ビューに基づいてindexの位置を返します。
    int
    ソート・キーの最大数を返します。
    final M
    配下のモデルを返します。
    int
    配下のモデルの行数を返します。
    ソートおよびフィルタの適用対象のデータを提供するモデル・ラッパーを返します。
    RowFilter<? super M, ? super Integer>
    必要に応じてビューに表示しない行を指定するフィルタを返します。
    現在のソート・キーを返します。
    boolean
    配下のモデルの更新時にソートを行う場合はtrue、そうでない場合はfalseを返します。
    int
    ビュー内の行数を返します。
    boolean
    isSortable(int column)
    指定された列がソート可能な場合はtrue、そうでない場合はfalseを返します。
    void
    配下のモデルの構造が完全に変更された場合に呼び出されます。
    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 final void
    ソートおよびフィルタの適用対象のデータを提供するモデル・ラッパーを設定します。
    void
    setRowFilter(RowFilter<? super M, ? super Integer> filter)
    必要に応じてビューに表示しない行を指定するフィルタを設定します。
    void
    setSortable(int column, boolean sortable)
    指定された列をソート可能にするかどうかを設定します。
    void
    setSortKeys(List<? extends RowSorter.SortKey> sortKeys)
    ソート・キーを設定します。
    void
    setSortsOnUpdates(boolean sortsOnUpdates)
    trueの場合、配下のモデルが更新された(rowsUpdatedが呼び出された)ときにソートを行うことを指定します。
    void
    現在ソート中の列のソート・キーと、このソーターに関連するフィルタがある場合はそのフィルタに基づいて、ビュー内の行をソートし、フィルタを適用します。
    void
    toggleSortOrder(int column)
    指定された列が第1のソート列であった場合、ソート順序を昇順から降順へ、または降順から昇順へ切り替えます。そうでない場合は、指定の列を第1のソート列(昇順)に変更します。

    クラスで宣言されたメソッド RowSorter

    addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListener
    修飾子と型
    メソッド
    説明
    void
    このRowSorterに関する通知を受け取るRowSorterListenerを追加します。
    protected void
    fireRowSorterChanged(int[] lastRowIndexToModel)
    マッピングが変更されたことをリスナーに通知します。
    protected void
    ソート順序が変更されたことをリスナーに通知します。
    void
    RowSorterListenerを削除します。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • コンストラクタの詳細

    • TableRowSorter

      public TableRowSorter()
      空のモデルでTableRowSorterを作成します。
    • TableRowSorter

      public TableRowSorter(M model)
      modelを配下のTableModelとして使用するTableRowSorterを作成します。
      パラメータ:
      model - 使用する配下のTableModelnull値は空のモデルとして扱われる
  • メソッドの詳細

    • setModel

      public void setModel(M model)
      このTableRowSorterの配下のモデルとして使用するTableModelを設定します。 null値を指定すると、空のモデルを設定できます。
      パラメータ:
      model使用する配下のモデル、またはnull
    • setStringConverter

      public void setStringConverter(TableStringConverter stringConverter)
      値をモデルから文字列に変換するために使用するオブジェクトを設定します。 null以外の値を指定した場合、登録済みのComparatorを持たないオブジェクト値を文字列に変換できます。
      パラメータ:
      stringConverter - 値をモデルから文字列に変換するために使用するオブジェクト
    • getStringConverter

      public TableStringConverter getStringConverter()
      値をモデルから文字列に変換するために使用するオブジェクトを返します。
      戻り値:
      値をモデルから文字列に変換するために使用するオブジェクト
    • getComparator

      public Comparator<?> getComparator(int column)
      指定された列のComparatorを返します。 setComparatorメソッドを使ってComparatorを指定していない場合、指定した列の列クラス(TableModel.getColumnClass)に基づいてComparatorが返されます。 列クラスがStringの場合、Collator.getInstanceが返されます。 列クラスがComparableを実装する場合は、compareToメソッドを呼び出すprivateのComparatorが返されます。 それ以外の場合はCollator.getInstanceが返されます。
      オーバーライド:
      getComparator、クラスDefaultRowSorter<M extends TableModel, Integer>
      パラメータ:
      column - 配下のモデルに基づいて、Comparatorをフェッチする列
      戻り値:
      指定された列のComparator
      スロー:
      IndexOutOfBoundsException - columnが配下のモデルの範囲外である場合
    • useToString

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