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
, Comparator
DefaultRowSorter.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, toggleSortOrder
addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListener
public TableRowSorter()
TableRowSorter
を作成します。public TableRowSorter(M model)
model
を配下の TableModel
として使用する TableRowSorter
を作成します。model
- 使用する配下の TableModel
。null
値は空のモデルとして扱われるpublic void setModel(M model)
TableRowSorter
の配下のモデルとして使用する TableModel
を設定します。null
値を指定すると、空のモデルを設定できます。model
使用する配下のモデル、または null
public 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
をフェッチする列Comparator
IndexOutOfBoundsException
- 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.