- 型パラメータ:
M- 配下のモデルのタイプ
- 直系の既知のサブクラス:
DefaultRowSorter
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のいずれかのメソッドを呼び出します。
- 導入されたバージョン:
- 1.6
- 関連項目:
-
ネストされたクラスのサマリー
ネストされたクラス -
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明voidこのRowSorterに関する通知を受け取るRowSorterListenerを追加します。abstract void配下のモデルのコンテンツが完全に変更された場合に呼び出されます。abstract intconvertRowIndexToModel(int index) 配下のモデルに基づいてindexの位置を返します。abstract intconvertRowIndexToView(int index) ビューに基づいてindexの位置を返します。protected voidfireRowSorterChanged(int[] lastRowIndexToModel) マッピングが変更されたことをリスナーに通知します。protected voidソート順序が変更されたことをリスナーに通知します。abstract MgetModel()配下のモデルを返します。abstract int配下のモデルの行数を返します。abstract List<? extends RowSorter.SortKey>現在のソート・キーを返します。abstract intビュー内の行数を返します。abstract void配下のモデルの構造が完全に変更された場合に呼び出されます。voidRowSorterListenerを削除します。abstract voidrowsDeleted(int firstRow, int endRow) 配下のモデルの指定された範囲(上限値と下限値を含む)から行が削除された場合に呼び出されます。abstract voidrowsInserted(int firstRow, int endRow) 配下のモデルの指定された範囲(上限値と下限値を含む)に行が挿入された場合に呼び出されます。abstract voidrowsUpdated(int firstRow, int endRow) 配下のモデルの指定された範囲(上限値と下限値を含む)で行が変更された場合に呼び出されます。abstract voidrowsUpdated(int firstRow, int endRow, int column) 配下のモデルの指定された範囲で行内の列が更新された場合に呼び出されます。abstract voidsetSortKeys(List<? extends RowSorter.SortKey> keys) 現在のソート・キーを設定します。abstract voidtoggleSortOrder(int column) 指定された列のソート順序を逆にします。
-
コンストラクタの詳細
-
RowSorter
public RowSorter()RowSorterを作成します。
-
-
メソッドの詳細
-
getModel
public abstract M getModel()配下のモデルを返します。- 戻り値:
- 配下のモデル
-
toggleSortOrder
public abstract void toggleSortOrder(int column) 指定された列のソート順序を逆にします。 呼び出されたときにこのとおりの動作が得られるかどうかは、サブクラスによって決まります。 通常、指定された列がプライマリのソート列であった場合、ソート順序を昇順から降順へ、または降順から昇順へ切り替えます。そうでない場合は、指定の列をプライマリのソート列(昇順)に変更します。 指定された列がソート可能でない場合、このメソッドは何の影響も及ぼしません。このメソッドによってソート順序が変更され、ソートが行われる場合は、適切な
RowSorterListener通知が送信されます。- パラメータ:
column- 配下のモデルに基づいて、ソート順序を切り替える列- 例外:
IndexOutOfBoundsException- columnが配下のモデルの範囲外である場合
-
convertRowIndexToModel
public abstract int convertRowIndexToModel(int index) 配下のモデルに基づいてindexの位置を返します。 ビューの座標の行indexに対応する、配下のモデルの行インデックスを返します。- パラメータ:
index- 配下のビューの行インデックス- 戻り値:
- ビューの行インデックス
- 例外:
IndexOutOfBoundsException-indexがビューの範囲外にある場合
-
convertRowIndexToView
public abstract int convertRowIndexToView(int index) ビューに基づいてindexの位置を返します。 配下のモデルの座標の行indexに対応する、ビューの行インデックスを返します。- パラメータ:
index- 配下のモデルの行インデックス- 戻り値:
- ビューの行インデックス。インデックスがビューの範囲外にある場合は -1
- 例外:
IndexOutOfBoundsException-indexがモデルの範囲外である場合
-
setSortKeys
public abstract void setSortKeys(List<? extends RowSorter.SortKey> keys) 現在のソート・キーを設定します。- パラメータ:
keys- 新規のSortKeys。空のリスト(このビューではソートを行わないことを示す)を指定する場合はnull
-
getSortKeys
public abstract List<? extends RowSorter.SortKey> getSortKeys()現在のソート・キーを返します。 このメソッドはnon-null Listを返します。さらに、変更不可能なListを返すこともあります。 ソート・キーを変更する必要がある場合は、返されたListのコピーを作成し、このコピーを変更して作成した新しいリストを使って、setSortKeysを呼び出します。- 戻り値:
- 現在のソート順序
-
getViewRowCount
public abstract int getViewRowCount()ビュー内の行数を返します。 コンテンツにフィルタが適用されている場合、この値が配下のモデルの行数と一致しない可能性があります。- 戻り値:
- ビュー内の行数
- 関連項目:
-
getModelRowCount
public abstract int getModelRowCount()配下のモデルの行数を返します。- 戻り値:
- 配下のモデルの行数
- 関連項目:
-
modelStructureChanged
public abstract void modelStructureChanged()配下のモデルの構造が完全に変更された場合に呼び出されます。 たとえば、TableModelで列数が変更された場合に、このメソッドが呼び出されます。通常、ユーザーがこのメソッドを呼び出すことはありません。 このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。
-
allRowsChanged
public abstract void allRowsChanged()配下のモデルのコンテンツが完全に変更された場合に呼び出されます。 変更されたのはコンテンツだけであり、テーブルの構造は変わりません。 これは、通常、その他のメソッドでは指定できないような過度の変更があった場合に送信されます。通常、ユーザーがこのメソッドを呼び出すことはありません。 このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。
-
rowsInserted
public abstract void rowsInserted(int firstRow, int endRow) 配下のモデルの指定された範囲(上限値と下限値を含む)に行が挿入された場合に呼び出されます。対象となる範囲のインデックスは、引数で指定します。 第1の引数は、変更前のモデルを基にしており、変更前のモデルのサイズ以下である必要があります。 第2の引数は、変更後のモデルを基にしており、変更後のモデルのサイズ未満である必要があります。 たとえば5行のモデルの末尾に3項目を追加する場合、インデックスは5,7になります。
通常、ユーザーがこのメソッドを呼び出すことはありません。 このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。
- パラメータ:
firstRow- 最初の行endRow- 最後の行- 例外:
IndexOutOfBoundsException- いずれかの引数が無効である場合、またはfirstRowのほうがendRowよりも大きい場合
-
rowsDeleted
public abstract void rowsDeleted(int firstRow, int endRow) 配下のモデルの指定された範囲(上限値と下限値を含む)から行が削除された場合に呼び出されます。対象となる範囲のインデックスは、変更前のモデルを表す引数で指定します。 たとえば5行のモデルの末尾から3項目を削除する場合、インデックスは2,4になります。
通常、ユーザーがこのメソッドを呼び出すことはありません。 このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。
- パラメータ:
firstRow- 最初の行endRow- 最後の行- 例外:
IndexOutOfBoundsException- どちらかの引数が変更前のモデルの範囲外にある場合、またはfirstRowのほうがendRowより大きい場合
-
rowsUpdated
public abstract void rowsUpdated(int firstRow, int endRow) 配下のモデルの指定された範囲(上限値と下限値を含む)で行が変更された場合に呼び出されます。通常、ユーザーがこのメソッドを呼び出すことはありません。 このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。
- パラメータ:
firstRow- 配下のモデルの最初の行endRow- 配下のモデルの最後の行- 例外:
IndexOutOfBoundsException- どちらかの引数が配下のモデルの範囲外にある場合、またはfirstRowのほうがendRowより大きい場合
-
rowsUpdated
public abstract void rowsUpdated(int firstRow, int endRow, int column) 配下のモデルの指定された範囲で行内の列が更新された場合に呼び出されます。通常、ユーザーがこのメソッドを呼び出すことはありません。 このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。
- パラメータ:
firstRow- 配下のモデルの最初の行endRow- 配下のモデルの最後の行column- 配下のモデルで変更された列- 例外:
IndexOutOfBoundsException- どちらかの引数が変更後の配下のモデルの範囲外にある場合、firstRowのほうがendRowより大きい場合、またはcolumnが配下のモデルの範囲外にある場合
-
addRowSorterListener
public void addRowSorterListener(RowSorterListener l) このRowSorterに関する通知を受け取るRowSorterListenerを追加します。 同じリスナーを複数追加した場合、複数の通知を受け取ることになります。lがnullの場合、何も行われません。- パラメータ:
l-RowSorterListener
-
removeRowSorterListener
public void removeRowSorterListener(RowSorterListener l) RowSorterListenerを削除します。lがnullの場合、何も行われません。- パラメータ:
l-RowSorterListener
-
fireSortOrderChanged
protected void fireSortOrderChanged()ソート順序が変更されたことをリスナーに通知します。 -
fireRowSorterChanged
protected void fireRowSorterChanged(int[] lastRowIndexToModel) マッピングが変更されたことをリスナーに通知します。- パラメータ:
lastRowIndexToModel- ソート前のモデル・インデックスからビュー・インデックスへのマッピング。nullも可能
-