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 を返すようにします。これにより、このクラスのパフォーマンスが飛躍的に向上します。
JTable, RowFilter, DefaultTableModel, Collator, ComparatorDefaultRowSorter.ModelWrapper<M,I>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)
ソート時に比較を行う前に、値を文字列に変換するかどうかを返します。
|
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, toggleSortOrderaddRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListenerpublic TableRowSorter()
TableRowSorter を作成します。public TableRowSorter(M model)
model を配下の TableModel として使用する TableRowSorter を作成します。model - 使用する配下の TableModel。null 値は空のモデルとして扱われるpublic void setModel(M model)
TableRowSorter の配下のモデルとして使用する TableModel を設定します。null 値を指定すると、空のモデルを設定できます。model 使用する配下のモデル、または nullpublic void setStringConverter(TableStringConverter stringConverter)
null 以外の値を指定した場合、登録済みの Comparator を持たないオブジェクト値を文字列に変換できます。stringConverter - 値をモデルから文字列に変換するために使用するオブジェクトpublic TableStringConverter getStringConverter()
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 をフェッチする列ComparatorIndexOutOfBoundsException - column が配下のモデルの範囲外である場合protected boolean useToString(int column)
ModelWrapper.getStringValueAt を使用し、そうでない場合は ModelWrapper.getValueAt を使用します。ModelWrapper 実装内でこの値を受け取る、TableRowSorter などのサブクラスに一致します。useToString、クラス: DefaultRowSorter<M extends TableModel,Integer>column - 配下のモデルに基づいて、テストする列のインデックスIndexOutOfBoundsException - column が有効でない場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.