モジュール java.desktop
パッケージ 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)を参照します。 デフォルトではソートは行われず(モデルと同様)、列はソート可能です。

DefaultRowSorterはabstractクラスです。 具象サブクラスは、setModelWrapperを呼び出して、配下のデータへのアクセスを提供する必要があります。 setModelWrapperメソッドは、コンストラクタの呼出し直後に呼び出す必要があります。可能であれば、サブクラスのコンストラクタ内で呼び出します。 ModelWrapperを指定しないで DefaultRowSorterを使用した場合、結果は保証されません。

DefaultRowSorterには2つの正式な型パラメータがあります。 1つめの型パラメータは、DefaultTableModelなど、モデルのクラスに対応しています。 もう1つの型パラメータは、RowFilterに渡される識別子のクラスに対応しています。 型パラメータの詳細は、TableRowSorterRowFilterを参照してください。

導入されたバージョン:
1.6
関連項目:
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    クラス
    説明
    protected static class 
    DefaultRowSorter.ModelWrapperは、DefaultRowSorterでソートされるデータを提供します。

    クラスjavax.swing.RowSorterで宣言されたネストされたクラス/インタフェース

    RowSorter.SortKey
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    空のDefaultRowSorterを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    配下のモデルのコンテンツが完全に変更された場合に呼び出されます。
    int
    配下のモデルに基づいてindexの位置を返します。
    int
    ビューに基づいてindexの位置を返します。
    getComparator(int column)
    指定された列のComparatorを返します。
    int
    ソート・キーの最大数を返します。
    final M
    配下のモデルを返します。
    int
    配下のモデルの行数を返します。
    ソートおよびフィルタの適用対象のデータを提供するモデル・ラッパーを返します。
    RowFilter<? super M,? super I>
    必要に応じてビューに表示しない行を指定するフィルタを返します。
    現在のソート・キーを返します。
    boolean
    配下のモデルの更新時にソートを行う場合はtrue、そうでない場合はfalseを返します。
    int
    ビュー内の行数を返します。
    boolean
    isSortable(int column)
    指定された列がソート可能な場合はtrue、そうでない場合はfalseを返します。
    void
    配下のモデルの構造が完全に変更された場合に呼び出されます。
    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 final void
    ソートおよびフィルタの適用対象のデータを提供するモデル・ラッパーを設定します。
    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
    現在ソート中の列のソート・キーと、このソーターに関連するフィルタがある場合はそのフィルタに基づいて、ビュー内の行をソートし、フィルタを適用します。
    void
    toggleSortOrder(int column)
    指定された列が第1のソート列であった場合、ソート順序を昇順から降順へ、または降順から昇順へ切り替えます。そうでない場合は、指定の列を第1のソート列(昇順)に変更します。
    protected boolean
    useToString(int column)
    ソート時に比較を行う前に、値を文字列に変換するかどうかを返します。

    クラス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 - modelWrappernullである場合
    • getModelWrapper

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

      public final M getModel()
      配下のモデルを返します。
      定義:
      getModel、クラスRowSorter<M>
      戻り値:
      配下のモデル
    • setSortable

      public void setSortable(int column, boolean sortable)
      指定された列をソート可能にするかどうかを設定します。 指定された値は、toggleSortOrderが呼び出されたときだけチェックされます。 ソート不可能とマークされている列でも、ソート・キーを直接設定することでソートできます。 デフォルトはtrueです。
      パラメータ:
      column - 配下のモデルに基づいて、ソートを有効または無効にする列
      sortable - 指定された列がソート可能であるかどうか
      例外:
      IndexOutOfBoundsException - columnがモデルの範囲外である場合
      関連項目:
    • isSortable

      public boolean isSortable(int column)
      指定された列がソート可能な場合はtrue、そうでない場合はfalseを返します。
      パラメータ:
      column - 配下のモデルに基づいて、ソートを調べる列
      戻り値:
      列がソート可能な場合はtrue
      例外:
      IndexOutOfBoundsException - columnが配下のモデルの範囲外である場合
    • setSortKeys

      public void setSortKeys(List<? extends RowSorter.SortKey> sortKeys)
      ソート・キーを設定します。 これにより、指定されたListのコピーが作成されます。その後、指定されたListに変更を加えても、このDefaultRowSorterに影響はありません。 ソート・キーが変更された場合、これがソートをトリガーします。
      定義:
      setSortKeys、クラスRowSorter<M>
      パラメータ:
      sortKeys - 新規のSortKeys。空のリスト(このビューではソートを行わないことを示す)を指定する場合はnull
      例外:
      IllegalArgumentException - sortKeysに、null値やモデルの範囲外の列インデックスを持つ値がある場合
    • getSortKeys

      public List<? extends RowSorter.SortKey> getSortKeys()
      現在のソート・キーを返します。 変更不可能なnon-null Listが返されます。 ソート・キーを変更する必要がある場合は、返されたListのコピーを作成し、このコピーを変更して作成した新しいリストを使って、setSortKeysを呼び出します。
      定義:
      getSortKeys、クラスRowSorter<M>
      戻り値:
      現在のソート順序
    • 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のソート列(昇順)に変更します。 指定された列がソート可能でない場合、このメソッドは何の影響も及ぼしません。
      定義:
      toggleSortOrder、クラスRowSorter<M>
      パラメータ:
      column - 配下のモデルに基づいて、第1のソート列にする列のインデックス
      例外:
      IndexOutOfBoundsException - columnが配下のモデルの範囲外である場合
      関連項目:
    • convertRowIndexToView

      public int convertRowIndexToView(int index)
      ビューに基づいてindexの位置を返します。 配下のモデルの座標の行indexに対応する、ビューの行インデックスを返します。
      定義:
      convertRowIndexToView、クラスRowSorter<M>
      パラメータ:
      index - 配下のモデルの行インデックス
      戻り値:
      ビューの行インデックス。インデックスがビューの範囲外にある場合は -1
      例外:
      IndexOutOfBoundsException - indexがモデルの範囲外である場合
    • convertRowIndexToModel

      public int convertRowIndexToModel(int index)
      配下のモデルに基づいてindexの位置を返します。 ビューの座標の行indexに対応する、配下のモデルの行インデックスを返します。
      定義:
      convertRowIndexToModel、クラスRowSorter<M>
      パラメータ:
      index - 配下のビューの行インデックス
      戻り値:
      ビューの行インデックス
      例外:
      IndexOutOfBoundsException - indexがビューの範囲外にある場合
    • sort

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

      protected boolean useToString(int column)
      ソート時に比較を行う前に、値を文字列に変換するかどうかを返します。 trueの場合はModelWrapper.getStringValueAtを使用し、そうでない場合はModelWrapper.getValueAtを使用します。 ModelWrapper実装内でこの値を受け取る、TableRowSorterなどのサブクラスに一致します。
      パラメータ:
      column - 配下のモデルに基づいて、テストする列のインデックス
      戻り値:
      ソート時に比較を行う前に値を文字列に変換する場合はtrue
      例外:
      IndexOutOfBoundsException - columnが有効でない場合
    • setComparator

      public void setComparator(int column, Comparator<?> comparator)
      指定された列のソート時に使用するComparatorを設定します。 これは、ソートをトリガーしません。 Comparatorの設定後にソートを行うには、明示的にsortを呼び出す必要があります。
      パラメータ:
      column - 配下のモデルに基づいて、Comparatorを使用する列のインデックス
      comparator - 使用するComparator
      例外:
      IndexOutOfBoundsException - columnが配下のモデルの範囲外である場合
    • getComparator

      public Comparator<?> getComparator(int column)
      指定された列のComparatorを返します。 これは、列にComparatorが指定されていない場合、nullを返します。
      パラメータ:
      column - 配下のモデルに基づいて、Comparatorをフェッチする列
      戻り値:
      指定された列のComparator
      例外:
      IndexOutOfBoundsException - columnが配下のモデルの範囲外である場合
    • getViewRowCount

      public int getViewRowCount()
      ビュー内の行数を返します。 コンテンツにフィルタが適用されている場合、この値が配下のモデルの行数と一致しない可能性があります。
      定義:
      getViewRowCount、クラスRowSorter<M>
      戻り値:
      ビュー内の行数
      関連項目:
    • getModelRowCount

      public int getModelRowCount()
      配下のモデルの行数を返します。
      定義:
      getModelRowCount、クラスRowSorter<M>
      戻り値:
      配下のモデルの行数
      関連項目:
    • modelStructureChanged

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

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

      定義:
      modelStructureChanged、クラスRowSorter<M>
    • allRowsChanged

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

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

      定義:
      allRowsChanged、クラスRowSorter<M>
    • rowsInserted

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

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

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

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

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

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

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

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

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

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

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

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

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

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