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, 2014, Oracle and/or its affiliates. All rights reserved.