M - モデルの型I - RowFilterに渡される識別子の型public abstract class DefaultRowSorter<M,I> extends RowSorter<M>
RowSorterの実装です。作成時やインストール時以外に、RowSorterと直接やりとりする必要はほとんどありません。JTableのRowSorterの具象実装については、TableRowSorterを参照してください。
ソートは、現在のSortKeyに基づいて順番に行われます。2つのオブジェクトが同等である(列のComparatorが0を返す)場合、次のSortKeyが使用されます。SortKeyが残っていない、または順序がUNSORTEDの場合、モデル内の行の順序が使用されます。
各列のソートは、setComparatorメソッドをにより指定可能なComparatorによって行われます。Comparatorが指定されていない場合は、配下のオブジェクト上にtoStringを呼び出した結果に対して、Collator.getInstance()から返されるComparatorが使用されます。Comparatorにnullが渡されることはありません。null値はnull以外の値の前に検出されたものとして処理されます。2つのnull値は同等と見なされます。
引数を、モデルによって提供されるその他の型にキャストするComparatorを指定した場合、データをソートするとClassCastExceptionがスローされます。
DefaultRowSorterは、ソート機能のほかに、行のフィルタ機能も提供します。フィルタは、setRowFilterメソッドで指定されたRowFilterによって行われます。フィルタが指定されていない場合、すべての行が含まれます。
デフォルトでは、行はソートされず(モデルと同様)、すべての列がソート可能です。デフォルトのComparatorは、TableRowSorterのように、サブクラスにドキュメント化されています。
配下のモデルの構造が変化した場合(modelStructureChangedメソッドが呼び出された場合)、列のComparator、現在のソート順序、および各列がソート可能であるかどうかの設定がリセットされ、デフォルト値に戻ります。デフォルトのComparatorを検出するには、具象実装(たとえば、TableRowSorter)を参照します。デフォルトではソートは行われず(モデルと同様)、列はソート可能です。
配下のモデルの構造が変化した場合(modelStructureChangedメソッドが呼び出された場合)、列のComparator、現在のソート順序、および列がソート可能であるかどうかの設定がリセットされ、デフォルト値に戻ります。
DefaultRowSorterはabstractクラスです。具象サブクラスは、setModelWrapperを呼び出して、配下のデータへのアクセスを提供する必要があります。setModelWrapperメソッドは、コンストラクタの呼出し直後に呼び出す必要があります。可能であれば、サブクラスのコンストラクタ内で呼び出します。ModelWrapperを指定しないでDefaultRowSorterを使用した場合、結果は保証されません。
DefaultRowSorterには2つの正式な型パラメータがあります。1つめの型パラメータは、DefaultTableModelなど、モデルのクラスに対応しています。もう1つの型パラメータは、RowFilterに渡される識別子のクラスに対応しています。型パラメータの詳細は、TableRowSorterとRowFilterを参照してください。
TableRowSorter, DefaultTableModel, Collator| 修飾子と型 | クラスと説明 |
|---|---|
protected static class |
DefaultRowSorter.ModelWrapper<M,I>
DefaultRowSorter.ModelWrapperは、DefaultRowSorterでソートされるデータを提供します。 |
RowSorter.SortKey| コンストラクタと説明 |
|---|
DefaultRowSorter()
空の
DefaultRowSorterを作成します。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
void |
allRowsChanged()
配下のモデルのコンテンツが完全に変更された場合に呼び出されます。
|
int |
convertRowIndexToModel(int index)
配下のモデルに基づいて
indexの位置を返します。 |
int |
convertRowIndexToView(int index)
ビューに基づいて
indexの位置を返します。 |
Comparator<?> |
getComparator(int column)
指定された列の
Comparatorを返します。 |
int |
getMaxSortKeys()
ソート・キーの最大数を返します。
|
M |
getModel()
配下のモデルを返します。
|
int |
getModelRowCount()
配下のモデルの行数を返します。
|
protected DefaultRowSorter.ModelWrapper<M,I> |
getModelWrapper()
ソートおよびフィルタの適用対象のデータを提供するモデル・ラッパーを返します。
|
RowFilter<? super M,? super I> |
getRowFilter()
必要に応じてビューに表示しない行を指定するフィルタを返します。
|
List<? extends RowSorter.SortKey> |
getSortKeys()
現在のソート・キーを返します。
|
boolean |
getSortsOnUpdates()
配下のモデルの更新時にソートを行う場合はtrue、そうでない場合はfalseを返します。
|
int |
getViewRowCount()
ビュー内の行数を返します。
|
boolean |
isSortable(int column)
指定された列がソート可能な場合はtrue、そうでない場合はfalseを返します。
|
void |
modelStructureChanged()
配下のモデルの構造が完全に変更された場合に呼び出されます。
|
void |
rowsDeleted(int firstRow, int endRow)
配下のモデルの指定された範囲(上限値と下限値を含む)から行が削除された場合に呼び出されます。
|
void |
rowsInserted(int firstRow, int endRow)
配下のモデルの指定された範囲(上限値と下限値を含む)に行が挿入された場合に呼び出されます。
|
void |
rowsUpdated(int firstRow, int endRow)
配下のモデルの指定された範囲(上限値と下限値を含む)で行が変更された場合に呼び出されます。
|
void |
rowsUpdated(int firstRow, int endRow, int column)
配下のモデルの指定された範囲で行内の列が更新された場合に呼び出されます。
|
void |
setComparator(int column, Comparator<?> comparator)
指定された列のソート時に使用する
Comparatorを設定します。 |
void |
setMaxSortKeys(int max)
ソート・キーの最大数を設定します。
|
protected void |
setModelWrapper(DefaultRowSorter.ModelWrapper<M,I> modelWrapper)
ソートおよびフィルタの適用対象のデータを提供するモデル・ラッパーを設定します。
|
void |
setRowFilter(RowFilter<? super M,? super I> filter)
必要に応じてビューに表示しない行を指定するフィルタを設定します。
|
void |
setSortable(int column, boolean sortable)
指定された列をソート可能にするかどうかを設定します。
|
void |
setSortKeys(List<? extends RowSorter.SortKey> sortKeys)
ソート・キーを設定します。
|
void |
setSortsOnUpdates(boolean sortsOnUpdates)
trueの場合、配下のモデルが更新された(
rowsUpdatedが呼び出された)ときにソートを行うことを指定します。 |
void |
sort()
現在ソート中の列のソート・キーと、このソーターに関連するフィルタがある場合はそのフィルタに基づいて、ビュー内の行をソートし、フィルタを適用します。
|
void |
toggleSortOrder(int column)
指定された列が第1のソート列であった場合、ソート順序を昇順から降順へ、または降順から昇順へ切り替えます。そうでない場合は、指定の列を第1のソート列(昇順)に変更します。
|
protected boolean |
useToString(int column)
ソート時に比較を行う前に、値を文字列に変換するかどうかを返します。
|
addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListenerprotected final void setModelWrapper(DefaultRowSorter.ModelWrapper<M,I> modelWrapper)
modelWrapper - ソートおよびフィルタの適用対象のデータを提供するモデル・ラッパーIllegalArgumentException - modelWrapperがnullである場合protected final DefaultRowSorter.ModelWrapper<M,I> getModelWrapper()
public void setSortable(int column,
boolean sortable)
toggleSortOrderが呼び出されたときだけチェックされます。ソート不可能とマークされている列でも、ソート・キーを直接設定することでソートできます。デフォルトはtrueです。column - 配下のモデルに基づいて、ソートを有効または無効にする列sortable - 指定された列がソート可能であるかどうかIndexOutOfBoundsException - columnがモデルの範囲外である場合toggleSortOrder(int), setSortKeys(java.util.List<? extends javax.swing.RowSorter.SortKey>)public boolean isSortable(int column)
column - 配下のモデルに基づいて、ソートを調べる列IndexOutOfBoundsException - columnが配下のモデルの範囲外である場合public void setSortKeys(List<? extends RowSorter.SortKey> sortKeys)
Listのコピーが作成されます。その後、指定されたListに変更を加えても、このDefaultRowSorterに影響はありません。ソート・キーが変更された場合、これがソートをトリガーします。setSortKeys、クラス: RowSorter<M>sortKeys - 新規のSortKeys。空のリスト(このビューではソートを行わないことを示す)を指定する場合はnullIllegalArgumentException - sortKeysに、null値やモデルの範囲外の列インデックスを持つ値がある場合public List<? extends RowSorter.SortKey> getSortKeys()
non-null Listが返されます。ソート・キーを変更する必要がある場合は、返されたListのコピーを作成し、このコピーを変更して作成した新しいリストを使って、setSortKeysを呼び出します。getSortKeys、クラス: RowSorter<M>public void setMaxSortKeys(int max)
setMaxSortKeys(2)を呼び出すとします。ユーザーが列1のヘッダーをクリックすると、列1の項目に基づいて表の行がソートされます。次に、ユーザーが列2のヘッダーをクリックすると、列2の項目に基づいて表がソートされます。列2に同じ値の項目がある場合、これらの行の順序は列1の項目に基づいて決定されます。この場合、行は列2を最優先にソートされ、列1を次に優先してソートされると言えます。ユーザーが列3のヘッダーをクリックすると、項目は列3の項目を最優先にソートされ、列2を次に優先してソートされます。setMaxSortKeysにより、ソート・キーの最大数は2に設定されているので、ソート順序は列1には影響されなくなります。
ソート・キーの最大数は、toggleSortOrderによって適用されます。setSortKeysを直接呼び出すと、より多くのソート・キーを指定でき、これらのキーはすべて受け付けられます。ただし、その後toggleSortOrderが呼び出されると、ソート・キーの最大数が適用されます。デフォルト値は3です。
max - ソート・キーの最大数IllegalArgumentException - maxが1未満の場合public int getMaxSortKeys()
public void setSortsOnUpdates(boolean sortsOnUpdates)
rowsUpdatedが呼び出された)ときにソートを行うことを指定します。たとえば、この値がtrueの場合、ユーザーがエントリを編集すると、ビュー内の項目の位置が変更されることがあります。デフォルトはfalseです。sortsOnUpdates - 更新イベントの発生時にソートを行うかどうかpublic boolean getSortsOnUpdates()
public void setRowFilter(RowFilter<? super M,? super I> filter)
nullは、モデルのすべての値を使用することを示します。
RowFilterのincludeメソッドが、配下のモデルをラップするEntryに渡されます。Entry内の列数は、ModelWrapper内の列数に対応しています。また、識別子もModelWrapperと共通です。
このメソッドは、ソートをトリガーします。
filter - 使用するエントリを決定するために使用するフィルタpublic RowFilter<? super M,? super I> getRowFilter()
public void toggleSortOrder(int column)
toggleSortOrder、クラス: RowSorter<M>column - 配下のモデルに基づいて、第1のソート列にする列のインデックスIndexOutOfBoundsException - columnが配下のモデルの範囲外である場合setSortable(int,boolean), setMaxSortKeys(int)public int convertRowIndexToView(int index)
indexの位置を返します。配下のモデルの座標の行indexに対応する、ビューの行インデックスを返します。convertRowIndexToView、クラス: RowSorter<M>index - 配下のモデルの行インデックスIndexOutOfBoundsException - indexがモデルの範囲外である場合public int convertRowIndexToModel(int index)
indexの位置を返します。ビューの座標の行indexに対応する、配下のモデルの行インデックスを返します。convertRowIndexToModel、クラス: RowSorter<M>index - 配下のビューの行インデックスIndexOutOfBoundsException - indexがビューの範囲外にある場合public void sort()
sortKeysリストは、このビューのソートができないことを示します。protected boolean useToString(int column)
ModelWrapper.getStringValueAtを使用し、そうでない場合はModelWrapper.getValueAtを使用します。ModelWrapper実装内でこの値を受け取る、TableRowSorterなどのサブクラスに一致します。column - 配下のモデルに基づいて、テストする列のインデックスIndexOutOfBoundsException - columnが有効でない場合public void setComparator(int column,
Comparator<?> comparator)
Comparatorを設定します。これは、ソートをトリガーしません。Comparatorの設定後にソートを行うには、明示的にsortを呼び出す必要があります。column - 配下のモデルに基づいて、Comparatorを使用する列のインデックスcomparator - 使用するComparatorIndexOutOfBoundsException - columnが配下のモデルの範囲外である場合public Comparator<?> getComparator(int column)
Comparatorを返します。これは、列にComparatorが指定されていない場合、nullを返します。column - 配下のモデルに基づいて、Comparatorをフェッチする列ComparatorIndexOutOfBoundsException - columnが配下のモデルの範囲外である場合public int getViewRowCount()
getViewRowCount、クラス: RowSorter<M>RowSorter.getModelRowCount()public int getModelRowCount()
getModelRowCount、クラス: RowSorter<M>RowSorter.getViewRowCount()public void modelStructureChanged()
TableModelで列数が変更された場合に、このメソッドが呼び出されます。
通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。
modelStructureChanged、クラス: RowSorter<M>public void allRowsChanged()
通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。
allRowsChanged、クラス: RowSorter<M>public void rowsInserted(int firstRow,
int endRow)
対象となる範囲のインデックスは、引数で指定します。第1の引数は、変更前のモデルを基にしており、変更前のモデルのサイズ以下である必要があります。第2の引数は、変更後のモデルを基にしており、変更後のモデルのサイズ未満である必要があります。たとえば5行のモデルの末尾に3項目を追加する場合、インデックスは5,7になります。
通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。
rowsInserted、クラス: RowSorter<M>firstRow - 最初の行endRow - 最後の行IndexOutOfBoundsException - いずれかの引数が無効である場合、またはfirstRowのほうがendRowよりも大きい場合public void rowsDeleted(int firstRow,
int endRow)
対象となる範囲のインデックスは、変更前のモデルを表す引数で指定します。たとえば5行のモデルの末尾から3項目を削除する場合、インデックスは2,4になります。
通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。
rowsDeleted、クラス: RowSorter<M>firstRow - 最初の行endRow - 最後の行IndexOutOfBoundsException - どちらかの引数が変更前のモデルの範囲外にある場合、またはfirstRowのほうがendRowより大きい場合public void rowsUpdated(int firstRow,
int endRow)
通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。
rowsUpdated、クラス: RowSorter<M>firstRow - 配下のモデルの最初の行endRow - 配下のモデルの最後の行IndexOutOfBoundsException - どちらかの引数が配下のモデルの範囲外にある場合、またはfirstRowのほうがendRowより大きい場合public void rowsUpdated(int firstRow,
int endRow,
int column)
通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュー・クラスから呼び出せるようにpublicになっています。
rowsUpdated、クラス: RowSorter<M>firstRow - 配下のモデルの最初の行endRow - 配下のモデルの最後の行column - 配下のモデルで変更された列IndexOutOfBoundsException - どちらかの引数が変更後の配下のモデルの範囲外にある場合、firstRowのほうがendRowより大きい場合、またはcolumnが配下のモデルの範囲外にある場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.