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, 2014, Oracle and/or its affiliates. All rights reserved.