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