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, removeRowSorterListener
protected 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
。空のリスト (このビューではソートを行わないことを示す) を指定する場合は null
IllegalArgumentException
- 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
- 使用する Comparator
IndexOutOfBoundsException
- column
が配下のモデルの範囲外である場合public Comparator<?> getComparator(int column)
Comparator
を返します。これは、列に Comparator
が指定されていない場合、null
を返します。column
- 配下のモデルに基づいて、Comparator
をフェッチする列Comparator
IndexOutOfBoundsException
- 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, 2013, Oracle and/or its affiliates. All rights reserved.