JavaTM Platform
Standard Ed. 6

javax.swing.table
クラス TableRowSorter<M extends TableModel>

java.lang.Object
  上位を拡張 javax.swing.RowSorter<M>
      上位を拡張 javax.swing.DefaultRowSorter<M,Integer>
          上位を拡張 javax.swing.table.TableRowSorter<M>
型パラメータ:
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
関連項目:
JTable, RowFilter, DefaultTableModel, Collator, Comparator

入れ子のクラスの概要
 
クラス javax.swing.DefaultRowSorter から継承された入れ子のクラス/インタフェース
DefaultRowSorter.ModelWrapper<M,I>
 
クラス javax.swing.RowSorter から継承された入れ子のクラス/インタフェース
RowSorter.SortKey
 
コンストラクタの概要
TableRowSorter()
          空のモデルで TableRowSorter を作成します。
TableRowSorter(M model)
          model を配下の TableModel として使用して、TableRowSorter を作成します。
 
メソッドの概要
 Comparator<?> getComparator(int column)
          指定された列の Comparator を返します。
 TableStringConverter getStringConverter()
          値をモデルから文字列に変換するために使用するオブジェクトを返します。
 void setModel(M model)
          この TableRowSorter の配下のモデルとして使用する TableModel を設定します。
 void setStringConverter(TableStringConverter stringConverter)
          値をモデルから文字列に変換するために使用するオブジェクトを設定します。
protected  boolean useToString(int column)
          ソート時に比較を行う前に、値を文字列に変換するかどうかを返します。
 
クラス javax.swing.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
 
クラス javax.swing.RowSorter から継承されたメソッド
addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListener
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

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 が返されます。

オーバーライド:
クラス DefaultRowSorter<M extends TableModel,Integer> 内の getComparator
パラメータ:
column - 配下のモデルに基づいて、Comparator を フェッチする列
戻り値:
指定された列の Comparator
例外:
IndexOutOfBoundsException - column が配下のモデルの範囲外である場合

useToString

protected boolean useToString(int column)
ソート時に比較を行う前に、値を文字列に変換するかどうかを返します。true の場合は ModelWrapper.getStringValueAt を使用し、そうでない場合は ModelWrapper.getValueAt を使用します。ModelWrapper 実装内でこの値を受け取る、TableRowSorter などのサブクラスに一致します。

オーバーライド:
クラス DefaultRowSorter<M extends TableModel,Integer> 内の useToString
パラメータ:
column - 配下のモデルに基づいて、テストする列のインデックス
例外:
IndexOutOfBoundsException - column が有効でない場合

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。