M
- 配下のモデルのタイプpublic abstract class RowSorter<M> extends Object
RowSorter
は、ソートとフィルタの基盤を提供します。作成時やインストール時以外に、RowSorter
と直接やりとりする必要はほとんどありません。JTable
の RowSorter
の具象実装については、TableRowSorter
を参照してください。
RowSorter
の基本機能は、ビュー (JTable
など) の座標系と配下のデータソース (通常はモデル) の座標系の間でマッピングを行うことです。
ビューは、RowSorter
上で次のメソッドを呼び出します。
toggleSortOrder
- 適切なユーザージェスチャーが発生してソートがトリガーされたときにビューにより呼び出されます。たとえば、ユーザーがテーブル内の列ヘッダーをクリックしたときなどに呼び出されます。
RowSorter
はマッピングを更新するべきではありません。
convertRowIndexToModel
メソッド、convertRowIndexToView
メソッド、および getViewRowCount
メソッドを非常によく使用するので、これらのメソッドは高速である必要があります。
RowSorter
は、RowSorterListener
を使って変更の通知を行います。通知には、次の 2 種類があります。
RowSorterEvent.Type.SORT_ORDER_CHANGED
- ソート順序が変更されたことをリスナーに通知します。通常、このあとに、ソートが変更されたという通知が送信されます。
RowSorterEvent.Type.SORTED
- RowSorter
が管理しているマッピングが変更されたことをリスナーに通知します。
RowSorter
実装と配下のモデルのマッピングは、通常、1 対 1 にはなっていませんが、1 対 1 にすることも可能です。たとえば、ソートを行うデータベースは、バックグラウンドスレッド上で toggleSortOrder
を呼び出します。このメソッドは、マッピングメソッドをオーバーライドして、渡された引数を返します。
RowSorter
の具象実装は、TableModel
、ListModel
などのモデルを参照する必要があります。JTable
や JList
などのビュークラスも、モデルを参照します。順序の依存性を回避するため、RowSorter
実装がモデル上にリスナーをインストールしないようにしてください。モデルが変更されると、ビュークラスが RowSorter
を呼び出します。たとえば、TableModel
JTable
で行が更新された場合、rowsUpdated
が呼び出されます。モデルが変更されると、ビューは、modelStructureChanged
、allRowsChanged
、rowsInserted
、rowsDeleted
、rowsUpdated
のいずれかのメソッドを呼び出します。
TableRowSorter
修飾子と型 | クラスと説明 |
---|---|
static class |
RowSorter.SortKey
SortKey は、特定の列のソート順序を記述します。
|
コンストラクタと説明 |
---|
RowSorter()
RowSorter を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
void |
addRowSorterListener(RowSorterListener l)
この
RowSorter に関する通知を受け取る RowSorterListener を追加します。 |
abstract void |
allRowsChanged()
配下のモデルのコンテンツが完全に変更された場合に呼び出されます。
|
abstract int |
convertRowIndexToModel(int index)
配下のモデルに基づいて
index の位置を返します。 |
abstract int |
convertRowIndexToView(int index)
ビューに基づいて
index の位置を返します。 |
protected void |
fireRowSorterChanged(int[] lastRowIndexToModel)
マッピングが変更されたことをリスナーに通知します。
|
protected void |
fireSortOrderChanged()
ソート順序が変更されたことをリスナーに通知します。
|
abstract M |
getModel()
配下のモデルを返します。
|
abstract int |
getModelRowCount()
配下のモデルの行数を返します。
|
abstract List<? extends RowSorter.SortKey> |
getSortKeys()
現在のソートキーを返します。
|
abstract int |
getViewRowCount()
ビュー内の行数を返します。
|
abstract void |
modelStructureChanged()
配下のモデルの構造が完全に変更された場合に呼び出されます。
|
void |
removeRowSorterListener(RowSorterListener l)
RowSorterListener を削除します。 |
abstract void |
rowsDeleted(int firstRow, int endRow)
配下のモデルの指定された範囲 (上限値と下限値を含む) から行が削除された場合に呼び出されます。
|
abstract void |
rowsInserted(int firstRow, int endRow)
配下のモデルの指定された範囲 (上限値と下限値を含む) に行が挿入された場合に呼び出されます。
|
abstract void |
rowsUpdated(int firstRow, int endRow)
配下のモデルの指定された範囲 (上限値と下限値を含む) で行が変更された場合に呼び出されます。
|
abstract void |
rowsUpdated(int firstRow, int endRow, int column)
配下のモデルの指定された範囲で行内の列が更新された場合に呼び出されます。
|
abstract void |
setSortKeys(List<? extends RowSorter.SortKey> keys)
現在のソートキーを設定します。
|
abstract void |
toggleSortOrder(int column)
指定された列のソート順序を逆にします。
|
public abstract M getModel()
public abstract void toggleSortOrder(int column)
このメソッドによってソート順序が変更され、ソートが行われる場合は、適切な RowSorterListener
通知が送信されます。
column
- 配下のモデルに基づいて、ソート順序を切り替える列IndexOutOfBoundsException
- column が配下のモデルの範囲外である場合public abstract int convertRowIndexToModel(int index)
index
の位置を返します。ビューの座標の行 index
に対応する、配下のモデルの行インデックスを返します。index
- 配下のビューの行インデックスIndexOutOfBoundsException
- index
がビューの範囲外にある場合public abstract int convertRowIndexToView(int index)
index
の位置を返します。配下のモデルの座標の行 index
に対応する、ビューの行インデックスを返します。index
- 配下のモデルの行インデックスIndexOutOfBoundsException
- index
がモデルの範囲外である場合public abstract void setSortKeys(List<? extends RowSorter.SortKey> keys)
keys
- 新規の SortKeys
。空のリスト (このビューではソートを行わないことを示す) を指定する場合は null
public abstract List<? extends RowSorter.SortKey> getSortKeys()
non-null List
を返します。さらに、変更不可能な List
を返すこともあります。ソートキーを変更する必要がある場合は、返された List
のコピーを作成し、このコピーを変更して作成した新しいリストを使って、setSortKeys
を呼び出します。public abstract int getViewRowCount()
getModelRowCount()
public abstract int getModelRowCount()
getViewRowCount()
public abstract void modelStructureChanged()
TableModel
で列数が変更された場合に、このメソッドが呼び出されます。
通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュークラスから呼び出せるように public になっています。
public abstract void allRowsChanged()
通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュークラスから呼び出せるように public になっています。
public abstract void rowsInserted(int firstRow, int endRow)
対象となる範囲のインデックスは、引数で指定します。第 1 の引数は、変更前のモデルを基にしており、変更前のモデルのサイズ以下である必要があります。第 2 の引数は、変更後のモデルを基にしており、変更後のモデルのサイズ未満である必要があります。たとえば 5 行のモデルの末尾に 3 項目を追加する場合、インデックスは 5,7 になります。
通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュークラスから呼び出せるように public になっています。
firstRow
- 最初の行endRow
- 最後の行IndexOutOfBoundsException
- いずれかの引数が無効である場合、または firstRow
のほうが endRow
よりも大きい場合public abstract void rowsDeleted(int firstRow, int endRow)
対象となる範囲のインデックスは、変更前のモデルを表す引数で指定します。たとえば 5 行のモデルの末尾から 3 項目を削除する場合、インデックスは 2,4 になります。
通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュークラスから呼び出せるように public になっています。
firstRow
- 最初の行endRow
- 最後の行IndexOutOfBoundsException
- どちらかの引数が変更前のモデルの範囲外にある場合、または firstRow
のほうが endRow
より大きい場合public abstract void rowsUpdated(int firstRow, int endRow)
通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュークラスから呼び出せるように public になっています。
firstRow
- 配下のモデルの最初の行endRow
- 配下のモデルの最後の行IndexOutOfBoundsException
- どちらかの引数が配下のモデルの範囲外にある場合、または firstRow
のほうが endRow
より大きい場合public abstract void rowsUpdated(int firstRow, int endRow, int column)
通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュークラスから呼び出せるように public になっています。
firstRow
- 配下のモデルの最初の行endRow
- 配下のモデルの最後の行column
- 配下のモデルで変更された列IndexOutOfBoundsException
- どちらかの引数が変更後の配下のモデルの範囲外にある場合、firstRow
のほうが endRow
より大きい場合、または column
が配下のモデルの範囲外にある場合public void addRowSorterListener(RowSorterListener l)
RowSorter
に関する通知を受け取る RowSorterListener
を追加します。同じリスナーを複数追加した場合、複数の通知を受け取ることになります。l
が null
の場合、何も行われません。l
- RowSorterListener
public void removeRowSorterListener(RowSorterListener l)
RowSorterListener
を削除します。l
が null
の場合、何も行われません。l
- RowSorterListener
protected void fireSortOrderChanged()
protected void fireRowSorterChanged(int[] lastRowIndexToModel)
lastRowIndexToModel
- ソート前のモデルインデックスからビューインデックスへのマッピング。次も可能: null
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.