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, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。