- 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
を選択する方法は、次のように定義します。- 列の
Comparator
がsetComparator
メソッドを使って指定されている場合は、このメソッドを使用します。 getColumnClass
から返される列クラスがString
の場合は、Collator.getInstance()
から返されるComparator
を使用します。- 列クラスが
Comparable
を実装する場合は、compareTo
メソッドを呼び出すComparator
を使用します。 TableStringConverter
が指定されている場合は、これを使って値をString
に変換し、Collator.getInstance()
から返されるComparator
を使用します。- それ以外の場合は、オブジェクト上で
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
の説明を参照してください。警告:
DefaultTableModel
はObject
の列クラスを返します。 そのため、すべての比較は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で宣言されたメソッド
convertRowIndexToModel, convertRowIndexToView, getMaxSortKeys, getModel, getModelWrapper, getRowFilter, getSortKeys, getSortsOnUpdates, isSortable, rowsDeleted, rowsInserted, rowsUpdated, rowsUpdated, setComparator, setMaxSortKeys, setModelWrapper, setRowFilter, setSortable, setSortKeys, setSortsOnUpdates, sort, toggleSortOrder
-
クラス javax.swing.RowSorterで宣言されたメソッド
addRowSorterListener, allRowsChanged, fireRowSorterChanged, fireSortOrderChanged, getModelRowCount, getViewRowCount, modelStructureChanged, removeRowSorterListener
-
-
-
-
コンストラクタの詳細
-
TableRowSorter
public TableRowSorter()
空のモデルでTableRowSorter
を作成します。
-
TableRowSorter
public TableRowSorter(M model)
model
を配下のTableModel
として使用するTableRowSorter
を作成します。- パラメータ:
model
- 使用する配下のTableModel
。null
値は空のモデルとして扱われる
-
-
メソッドの詳細
-
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
- 配下のモデルに基づいて、テストする列のインデックス- 戻り値:
- ソート時に比較を行う前に値を文字列に変換する場合はtrue
- 例外:
IndexOutOfBoundsException
-column
が有効でない場合
-
-