JavaTM Platform
Standard Ed. 6

javax.swing
クラス DefaultRowSorter<M,I>

java.lang.Object
  上位を拡張 javax.swing.RowSorter<M>
      上位を拡張 javax.swing.DefaultRowSorter<M,I>
型パラメータ:
M - モデルの型
I - RowFilter に渡される識別子の型
直系の既知のサブクラス:
TableRowSorter

public abstract class DefaultRowSorter<M,I>
extends RowSorter<M>

グリッドベースのデータモデルのソートやフィルタの適用を行う RowSorter の実装です。作成時やインストール時以外に、RowSorter と直接対話する必要はほとんどありません。JTableRowSorter の具象実装については、TableRowSorter を参照してください。

ソートは、現在の SortKey に基づいて順番に行われます。2 つのオブジェクトが同等である (列の Comparator が 0 を返す) 場合、次の SortKey が使用されます。SortKey が残っていない、または順序が UNSORTED の場合、モデル内の行の順序が使用されます。

各列のソートは、setComparator メソッドを使って指定可能な Comparator によって行われます。Comparator が指定されていない場合、配下のオブジェクト上に toString を呼び出した結果に対して、Collator.getInstance() から返される Comparator が使用されます。Comparatornull が渡されることはありません。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 に渡される識別子のクラスに対応しています。型パラメータの詳細は、TableRowSorterRowFilter を参照してください。

導入されたバージョン:
1.6
関連項目:
TableRowSorter, DefaultTableModel, Collator

入れ子のクラスの概要
protected static class DefaultRowSorter.ModelWrapper<M,I>
          DefaultRowSorter.ModelWrapper は、DefaultRowSorter でソートされるデータを提供します。
 
クラス javax.swing.RowSorter から継承された入れ子のクラス/インタフェース
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 のソート列であった場合、ソート順序を昇順から降順へ、または降順から昇順へ切り替えます。
protected  boolean useToString(int column)
          ソート時に比較を行う前に、値を文字列に変換するかどうかを返します。
 
クラス javax.swing.RowSorter から継承されたメソッド
addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListener
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

DefaultRowSorter

public DefaultRowSorter()
空の DefaultRowSorter を作成します。

メソッドの詳細

setModelWrapper

protected final void setModelWrapper(DefaultRowSorter.ModelWrapper<M,I> modelWrapper)
ソートおよびフィルタの適用対象のデータを提供するモデルラッパーを設定します。

パラメータ:
modelWrapper - ソートおよびフィルタの適用対象のデータを 提供するモデルラッパー
例外:
IllegalArgumentException - modelWrapper が (null の場合)

getModelWrapper

protected final DefaultRowSorter.ModelWrapper<M,I> getModelWrapper()
ソートおよびフィルタの適用対象のデータを提供するモデルラッパーを返します。

戻り値:
ソートおよびフィルタの適用対象のデータを 提供するモデルラッパー

getModel

public final M getModel()
配下のモデルを返します。

定義:
クラス RowSorter<M> 内の getModel
戻り値:
配下のモデル

setSortable

public void setSortable(int column,
                        boolean sortable)
指定された列をソート可能にするかどうかを設定します。指定された値は、toggleSortOrder が呼び出されたときだけチェックされます。ソート不可能とマークされている列でも、ソートキーを直接設定することでソートできます。policy.allowSystemProperty プロパティーのデフォルト値は true です。

パラメータ:
column - 配下のモデルに基づいて、ソートを有効または無効にする列
sortable - 指定された列がソート可能であるかどうか
例外:
IndexOutOfBoundsException - column がモデルの範囲外である場合
関連項目:
toggleSortOrder(int), setSortKeys(java.util.List)

isSortable

public boolean isSortable(int column)
指定された列がソート可能な場合は true、そうでない場合は false を返します。

パラメータ:
column - 配下のモデルに基づいて、 ソートを調べる列
戻り値:
列がソート可能な場合は true
例外:
IndexOutOfBoundsException - column が配下のモデルの範囲外である場合

setSortKeys

public void setSortKeys(List<? extends RowSorter.SortKey> sortKeys)
ソートキーを設定します。これにより、指定された List のコピーが作成されます。その後、この List に変更を加えても、この DefaultRowSorter に影響はありません。ソートキーが変更された場合、これがソートをトリガーします。

定義:
クラス RowSorter<M> 内の setSortKeys
パラメータ:
sortKeys - 新規の SortKeys。 空のリスト (このビューではソートを行わないことを示す) を 指定する場合は null
例外:
IllegalArgumentException - sortKeys に、null 値や モデルの範囲外の列インデックスを持つ値が ある場合

getSortKeys

public List<? extends RowSorter.SortKey> getSortKeys()
現在のソートキーを返します。変更不可能な null でない List が返されます。ソートキーを変更する必要がある場合は、返された List のコピーを作成し、このコピーを変更して作成した新しいリストを使って、setSortKeys を呼び出します。

定義:
クラス RowSorter<M> 内の getSortKeys
戻り値:
現在のソート順序

setMaxSortKeys

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より小さい場合

getMaxSortKeys

public int getMaxSortKeys()
ソートキーの最大数を返します。

戻り値:
ソートキーの最大数

setSortsOnUpdates

public void setSortsOnUpdates(boolean sortsOnUpdates)
true の場合、配下のモデルが更新された (rowsUpdated が呼び出された) ときにソートを行うことを指定します。たとえば、この値が true の場合、ユーザーがエントリを編集すると、ビュー内の項目の位置が変更されることがあります。デフォルトは false です。

パラメータ:
sortsOnUpdates - 更新イベントの発生時にソートを行うかどうか

getSortsOnUpdates

public boolean getSortsOnUpdates()
配下のモデルの更新時にソートを行う場合は true、そうでない場合は false を返します。

戻り値:
モデルの更新時にソートを行うかどうか

setRowFilter

public void setRowFilter(RowFilter<? super M,? super I> filter)
必要に応じてビューに表示しない行を指定するフィルタを設定します。フィルタは、ソートの前に適用されます。値 null は、モデルのすべての値を使用することを示します。

RowFilterinclude メソッドが、配下のモデルをラップする Entry に渡されます。Entry 内の列数は、ModelWrapper 内の列数に対応しています。また、識別子も ModelWrapper と共通です。

このメソッドは、ソートをトリガーします。

パラメータ:
filter - 使用するエントリを決定するために 使用するフィルタ

getRowFilter

public RowFilter<? super M,? super I> getRowFilter()
必要に応じてビューに表示しない行を指定するフィルタを返します。

戻り値:
フィルタ

toggleSortOrder

public void toggleSortOrder(int column)
指定された列が第 1 のソート列であった場合、ソート順序を昇順から降順へ、または降順から昇順へ切り替えます。そうでない場合は、指定の列を第 1 のソート列 (昇順) に変更します。指定された列がソート可能でない場合、このメソッドは何も影響を及ぼしません。

定義:
クラス RowSorter<M> 内の toggleSortOrder
パラメータ:
column - 配下のモデルに基づいて、 第 1 のソート列にする列のインデックス
例外:
IndexOutOfBoundsException - column が配下のモデルの範囲外である場合
関連項目:
setSortable(int,boolean), setMaxSortKeys(int)

convertRowIndexToView

public int convertRowIndexToView(int index)
ビューの index の位置を返します。配下のモデルの座標の行 index の場合、ビューの行インデックスを返します。

定義:
クラス RowSorter<M> 内の convertRowIndexToView
パラメータ:
index - 配下のモデルの行インデックス
戻り値:
ビューの行インデックス。インデックスがビューの 範囲外にある場合は -1
例外:
IndexOutOfBoundsException - index がモデルの範囲外にある場合

convertRowIndexToModel

public int convertRowIndexToModel(int index)
配下のモデルの index の位置を返します。ビューの座標の行 index の場合、配下のモデルの行インデックスを返します。

定義:
クラス RowSorter<M> 内の convertRowIndexToModel
パラメータ:
index - 配下のビューの行インデックス
戻り値:
ビューの行インデックス
例外:
IndexOutOfBoundsException - index がビューの範囲外にある場合

sort

public void sort()
現在ソート中の列のソートキーと、このソーターに関連するフィルタがある場合はそのフィルタに基づいて、ビュー内の行をソートし、フィルタを適用します。モデルの場合と同様に、空の sortKeys リストは、このビューのソートができないことを示します。

関連項目:
setRowFilter(javax.swing.RowFilter), setSortKeys(java.util.List)

useToString

protected boolean useToString(int column)
ソート時に比較を行う前に、値を文字列に変換するかどうかを返します。true の場合は ModelWrapper.getStringValueAt を使用し、そうでない場合は ModelWrapper.getValueAt を使用します。ModelWrapper 実装内でこの値を受け取る、TableRowSorter などのサブクラスに一致します。

パラメータ:
column - 配下のモデルに基づいて、テストする列のインデックス
例外:
IndexOutOfBoundsException - column が有効でない場合

setComparator

public void setComparator(int column,
                          Comparator<?> comparator)
指定された列のソート時に使用する Comparator を設定します。これは、ソートをトリガーしません。Comparator の設定後にソートを行うには、明示的に sort を呼び出す必要があります。

パラメータ:
column - 配下のモデルに基づいて、Comparator を使用する列のインデックス
comparator - 使用する Comparator
例外:
IndexOutOfBoundsException - columns が配下のモデルの 範囲外にある場合

getComparator

public Comparator<?> getComparator(int column)
指定された列の Comparator を返します。これは、列に Comparateor が指定されていない場合、null を返します。

パラメータ:
column - 配下のモデルに基づいて、Comparator を フェッチする列
戻り値:
指定された列の Comparator
例外:
IndexOutOfBoundsException - column が配下のモデルの範囲外である場合

getViewRowCount

public int getViewRowCount()
ビュー内の行数を返します。コンテンツにフィルタが適用されている場合、この値が配下のモデルの行数と一致しない可能性があります。

定義:
クラス RowSorter<M> 内の getViewRowCount
戻り値:
ビュー内の行数
関連項目:
RowSorter.getModelRowCount()

getModelRowCount

public int getModelRowCount()
配下のモデルの行数を返します。

定義:
クラス RowSorter<M> 内の getModelRowCount
戻り値:
配下のモデルの行数
関連項目:
RowSorter.getViewRowCount()

modelStructureChanged

public void modelStructureChanged()
配下のモデルの構造が完全に変更された場合に呼び出されます。たとえば、TableModel で列数が変更された場合に、このメソッドが呼び出されます。

通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュークラスから呼び出せるように public になっています。

定義:
クラス RowSorter<M> 内の modelStructureChanged

allRowsChanged

public void allRowsChanged()
配下のモデルのコンテンツが完全に変更された場合に呼び出されます。変更されたのはコンテンツだけであり、テーブルの構造は変わりません。これは、通常、その他のメソッドでは指定できないような過度の変更があった場合に送信されます。

通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュークラスから呼び出せるように public になっています。

定義:
クラス RowSorter<M> 内の allRowsChanged

rowsInserted

public void rowsInserted(int firstRow,
                         int endRow)
配下のモデルの指定された範囲 (上限値と下限値を含む) に行が挿入された場合に呼び出されます。

対象となる範囲のインデックスは、引数で指定します。第 1 の引数は、変更前のモデルを基にしており、変更前のモデルのサイズ以下である必要があります。第 2 の引数は、変更後のモデルを基にしており、変更後のモデルのサイズ未満である必要があります。たとえば 5 行のモデルの末尾に 3 項目を追加する場合、インデックスは 5,7 になります。

通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュークラスから呼び出せるように public になっています。

定義:
クラス RowSorter<M> 内の rowsInserted
パラメータ:
firstRow - 最初の行
endRow - 最後の行
例外:
IndexOutOfBoundsException - いずれかの引数が無効である場合、または firstRowendRow よりも大きい場合

rowsDeleted

public void rowsDeleted(int firstRow,
                        int endRow)
配下のモデルの指定された範囲 (上限値と下限値を含む) から行が削除された場合に呼び出されます。

対象となる範囲のインデックスは、変更前のモデルを表す引数で指定します。たとえば 5 行のモデルの末尾から 3 項目を削除する場合、インデックスは 2,4 になります。

通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュークラスから呼び出せるように public になっています。

定義:
クラス RowSorter<M> 内の rowsDeleted
パラメータ:
firstRow - 最初の行
endRow - 最後の行
例外:
IndexOutOfBoundsException - どちらかの引数が変更前のモデルの範囲外にある場合、または firstRow のほうが endRow より大きい場合

rowsUpdated

public void rowsUpdated(int firstRow,
                        int endRow)
配下のモデルの指定された範囲 (上限値と下限値を含む) で行が変更された場合に呼び出されます。

通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュークラスから呼び出せるように public になっています。

定義:
クラス RowSorter<M> 内の rowsUpdated
パラメータ:
firstRow - 配下のモデルの最初の行
endRow - 配下のモデルの最後の行
例外:
IndexOutOfBoundsException - どちらかの引数が配下のモデルの範囲外にある場合、または firstRow のほうが endRow より大きい場合

rowsUpdated

public void rowsUpdated(int firstRow,
                        int endRow,
                        int column)
配下のモデルの指定された範囲で行内の列が更新された場合に呼び出されます。

通常、ユーザーがこのメソッドを呼び出すことはありません。このメソッドは、ビュークラスから呼び出せるように public になっています。

定義:
クラス RowSorter<M> 内の rowsUpdated
パラメータ:
firstRow - 配下のモデルの最初の行
endRow - 配下のモデルの最後の行
column - 配下のモデルに基づいて、 変更した列
例外:
IndexOutOfBoundsException - どちらかの引数が変更後の配下のモデルの範囲外にある場合、firstRow のほうが endRow より大きい場合、または column が配下のモデルの範囲外にある場合

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。