M - モデルの型。例: PersonModelI - 識別子の型。TableRowSorter の使用時は Integerpublic abstract class RowFilter<M,I> extends Object
RowFilter は、エントリをモデルからフィルタリングして、ビューに表示されないようにするために使用します。たとえば、JTable に関連付けられた RowFilter では、特定の文字列を持つ列が含まれている行しか許可されないことがあります。エントリの意味は、コンポーネントの型によって異なります。たとえば、フィルタが JTable に関連付けられている場合、エントリは行を意味します。フィルタが JTree に関連付けられている場合、エントリはノードを意味します。
サブクラスは、include メソッドをオーバーライドして、エントリをビューに表示するかどうかを指定する必要があります。エントリの各列の値を取得するには、Entry 引数を使用できます。次に、例として、文字列「a」で始まる値 (複数可) を含むエントリだけを許可する include メソッドを示します。
RowFilter<Object,Object> startsWithAFilter = new RowFilter<Object,Object>() {
public boolean include(Entry<? extends Object, ? extends Object> entry) {
for (int i = entry.getValueCount() - 1; i >= 0; i--) {
if (entry.getStringValue(i).startsWith("a")) {
// The value starts with "a", include it
return true;
}
}
// None of the columns start with "a"; return false so that this
// entry is not shown
return false;
}
};
RowFilter には、特定のモデルの RowFilter の作成を許可する 2 つの仮パラメータ型が用意されています。たとえば、次のコードは、Person 型のオブジェクトをラップする特定のモデルを示しています。20 歳以上の Person だけが表示されます。
RowFilter<PersonModel,Integer> ageFilter = new RowFilter<PersonModel,Integer>() {
public boolean include(Entry<? extends PersonModel, ? extends Integer> entry) {
PersonModel personModel = entry.getModel();
Person person = personModel.getPerson(entry.getIdentifier());
if (person.getAge() > 20) {
// Returning true indicates this row should be shown.
return true;
}
// Age is <= 20, don't show it.
return false;
}
};
PersonModel model = createPersonModel();
TableRowSorter<PersonModel> sorter = new TableRowSorter<PersonModel>(model);
sorter.setRowFilter(ageFilter);
TableRowSorter| 修飾子と型 | クラスと説明 |
|---|---|
static class |
RowFilter.ComparisonType
一部のデフォルトの
RowFilter でサポートされる、値比較に使用可能な値の列挙です。 |
static class |
RowFilter.Entry<M,I>
Entry オブジェクトが RowFilter のインスタンスに渡されると、フィルタはエントリのデータ値を取得し、エントリを表示するかどうかを判断できます。 |
| コンストラクタと説明 |
|---|
RowFilter() |
| 修飾子と型 | メソッドと説明 |
|---|---|
static <M,I> RowFilter<M,I> |
andFilter(Iterable<? extends RowFilter<? super M,? super I>> filters)
指定されたすべてのフィルタ条件に一致するエントリがある場合、そのエントリを示す
RowFilter を返します。 |
static <M,I> RowFilter<M,I> |
dateFilter(RowFilter.ComparisonType type, Date date, int... indices)
指定された基準を満たす
Date 値を少なくとも 1 つ以上持つエントリを含める RowFilter を返します。 |
abstract boolean |
include(RowFilter.Entry<? extends M,? extends I> entry)
指定されたエントリを表示する場合は true、表示しない場合は false を返します。
|
static <M,I> RowFilter<M,I> |
notFilter(RowFilter<M,I> filter)
指定されたフィルタ条件にエントリが一致しない場合、一致しないエントリを示す
RowFilter を返します。 |
static <M,I> RowFilter<M,I> |
numberFilter(RowFilter.ComparisonType type, Number number, int... indices)
指定された基準を満たす
Number 値を少なくとも 1 つ以上持つエントリを含める RowFilter を返します。 |
static <M,I> RowFilter<M,I> |
orFilter(Iterable<? extends RowFilter<? super M,? super I>> filters)
指定されたフィルタ条件のいずれかに一致するエントリがある場合、そのエントリを示す
RowFilter を返します。 |
static <M,I> RowFilter<M,I> |
regexFilter(String regex, int... indices)
正規表現を使って含めるエントリを特定する
RowFilter を返します。 |
public static <M,I> RowFilter<M,I> regexFilter(String regex, int... indices)
RowFilter を返します。一致する値を少なくとも 1 つ以上持つエントリが含められます。たとえば次のコードは、「a」で始まる値を少なくとも 1 つ以上持つエントリを含める RowFilter を作成します。
RowFilter.regexFilter("^a");
返されるフィルタは、Matcher.find() を使って取り込み内容を確認します。完全一致の有無を確認するには、文字列「^」と「$」を使って、文字列の先頭と末尾の文字を比較します。たとえば「^foo$」と指定した場合、「foo」と完全に一致する文字列のある行だけが含められます。「food」は一致とは見なされません。サポートされている正規表現の構文の詳細は、Pattern を参照してください。
regex - フィルタを適用する正規表現indices - 調べる値のインデックス。そうでない場合は、指定されたすべての値が評価されるRowFilterNullPointerException - regex が null である場合IllegalArgumentException - indices に 0 より小さい値が含まれる場合PatternSyntaxException - regex が有効な正規表現でない場合。Patternpublic static <M,I> RowFilter<M,I> dateFilter(RowFilter.ComparisonType type, Date date, int... indices)
Date 値を少なくとも 1 つ以上持つエントリを含める RowFilter を返します。たとえば次の RowFilter は、現在の日付よりあとの 1 つ以上の日付の値を持つエントリを含めます。
RowFilter.dateFilter(ComparisonType.AFTER, new Date());
type - 実行する比較の型date - 比較対象の日付indices - 調べる値のインデックス。そうでない場合は、指定されたすべての値が評価されるRowFilterNullPointerException - date が null である場合IllegalArgumentException - indices に 0 より小さい値が含まれる場合、または type が null の場合Calendar, Datepublic static <M,I> RowFilter<M,I> numberFilter(RowFilter.ComparisonType type, Number number, int... indices)
Number 値を少なくとも 1 つ以上持つエントリを含める RowFilter を返します。たとえば次のフィルタは、10 と等しい値を少なくとも 1 つ以上持つエントリを含めます。
RowFilter.numberFilter(ComparisonType.EQUAL, 10);
type - 実行する比較の型indices - 調べる値のインデックス。そうでない場合は、指定されたすべての値が評価されるRowFilterIllegalArgumentException - indices に 0 より小さい値が含まれる場合、type が null の場合、または number が null の場合public static <M,I> RowFilter<M,I> orFilter(Iterable<? extends RowFilter<? super M,? super I>> filters)
RowFilter を返します。
次のサンプルコードは、文字列「foo」または「bar」があるエントリを含める RowFilter を作成します。
List<RowFilter<Object,Object>> filters = new ArrayList<RowFilter<Object,Object>>(2);
filters.add(RowFilter.regexFilter("foo"));
filters.add(RowFilter.regexFilter("bar"));
RowFilter<Object,Object> fooBarFilter = RowFilter.orFilter(filters);
filters - テストする RowFilterRowFilterIllegalArgumentException - 次のフィルタが存在する場合: nullNullPointerException - filters が null である場合Arrays.asList(T...)public static <M,I> RowFilter<M,I> andFilter(Iterable<? extends RowFilter<? super M,? super I>> filters)
RowFilter を返します。
次のサンプルコードは、文字列「foo」と「bar」があるエントリを含める RowFilter を作成します。
List<RowFilter<Object,Object>> filters = new ArrayList<RowFilter<Object,Object>>(2);
filters.add(RowFilter.regexFilter("foo"));
filters.add(RowFilter.regexFilter("bar"));
RowFilter<Object,Object> fooBarFilter = RowFilter.andFilter(filters);
filters - テストする RowFilterRowFilterIllegalArgumentException - 次のフィルタが存在する場合: nullNullPointerException - filters が null である場合Arrays.asList(T...)public static <M,I> RowFilter<M,I> notFilter(RowFilter<M,I> filter)
RowFilter を返します。filter - 否定する RowFilterRowFilterIllegalArgumentException - filter が null である場合public abstract boolean include(RowFilter.Entry<? extends M,? extends I> entry)
entry 引数は、呼び出しの間にかぎり有効です。呼び出しの完了後に entry を使用した場合の動作は未定義です。
entry - 配下のモデルからのオブジェクトをラップする null 以外のオブジェクト バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.