M
- the type of the model; for example PersonModel
I
- the type of the identifier; when using TableRowSorter
this will be Integer
public abstract class RowFilter<M,I> extends Object
RowFilter
is used to filter out entries from the model so that they are not shown in the view. For example, a RowFilter
associated with a JTable
might only allow rows that contain a column with a specific string. The meaning of entry depends on the component type. For example, when a filter is associated with a JTable
, an entry corresponds to a row; when associated with a JTree
, an entry corresponds to a node. Subclasses must override the include
method to indicate whether the entry should be shown in the view. The Entry
argument can be used to obtain the values in each of the columns in that entry. The following example shows an include
method that allows only entries containing one or more values starting with the string "a":
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
has two formal type parameters that allow you to create a RowFilter
for a specific model. For example, the following assumes a specific model that is wrapping objects of type Person
. Only Person
s with an age over 20 will be shown: 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);
Modifier and Type | Class | Description |
---|---|---|
static enum |
RowFilter.ComparisonType |
Enumeration of the possible comparison values supported by some of the default RowFilter s. |
static class |
RowFilter.Entry<M, |
An Entry object is passed to instances of RowFilter , allowing the filter to get the value of the entry's data, and thus to determine whether the entry should be shown. |
Modifier | Constructor | Description |
---|---|---|
protected |
Constructor for subclasses to call. |
Modifier and Type | Method | Description |
---|---|---|
static <M, |
andFilter |
Returns a RowFilter that includes entries if all of the supplied filters include the entry. |
static <M, |
dateFilter |
Returns a RowFilter that includes entries that have at least one Date value meeting the specified criteria. |
abstract boolean |
include |
Returns true if the specified entry should be shown; returns false if the entry should be hidden. |
static <M, |
notFilter |
Returns a RowFilter that includes entries if the supplied filter does not include the entry. |
static <M, |
numberFilter |
Returns a RowFilter that includes entries that have at least one Number value meeting the specified criteria. |
static <M, |
orFilter |
Returns a RowFilter that includes entries if any of the supplied filters includes the entry. |
static <M, |
regexFilter |
Returns a RowFilter that uses a regular expression to determine which entries to include. |
protected RowFilter()
public static <M, I> RowFilter<M,I> regexFilter(String regex, int... indices)
RowFilter
that uses a regular expression to determine which entries to include. Only entries with at least one matching value are included. For example, the following creates a RowFilter
that includes entries with at least one value starting with "a": RowFilter.regexFilter("^a");
The returned filter uses Matcher.find()
to test for inclusion. To test for exact matches use the characters '^' and '$' to match the beginning and end of the string respectively. For example, "^foo$" includes only rows whose string is exactly "foo" and not, for example, "food". See Pattern
for a complete description of the supported regular-expression constructs.
M
- the type of the model to which the RowFilter
appliesI
- the type of the identifier passed to the RowFilter
regex
- the regular expression to filter onindices
- the indices of the values to check. If not supplied all values are evaluatedRowFilter
implementing the specified criteriaNullPointerException
- if regex
is null
IllegalArgumentException
- if any of the indices
are < 0PatternSyntaxException
- if regex
is not a valid regular expression.public static <M, I> RowFilter<M,I> dateFilter(RowFilter.ComparisonType type, Date date, int... indices)
RowFilter
that includes entries that have at least one Date
value meeting the specified criteria. For example, the following RowFilter
includes only entries with at least one date value after the current date: RowFilter.dateFilter(ComparisonType.AFTER, new Date());
M
- the type of the model to which the RowFilter
appliesI
- the type of the identifier passed to the RowFilter
type
- the type of comparison to performdate
- the date to compare againstindices
- the indices of the values to check. If not supplied all values are evaluatedRowFilter
implementing the specified criteriaNullPointerException
- if date
is null
IllegalArgumentException
- if any of the indices
are < 0 or type
is null
public static <M, I> RowFilter<M,I> numberFilter(RowFilter.ComparisonType type, Number number, int... indices)
RowFilter
that includes entries that have at least one Number
value meeting the specified criteria. For example, the following filter will only include entries with at least one number value equal to 10: RowFilter.numberFilter(ComparisonType.EQUAL, 10);
M
- the type of the model to which the RowFilter
appliesI
- the type of the identifier passed to the RowFilter
type
- the type of comparison to performnumber
- a Number
value to compare againstindices
- the indices of the values to check. If not supplied all values are evaluatedRowFilter
implementing the specified criteriaIllegalArgumentException
- if any of the indices
are < 0, type
is null
or number
is null
public static <M, I> RowFilter<M,I> orFilter(Iterable<? extends RowFilter<? super M,? super I>> filters)
RowFilter
that includes entries if any of the supplied filters includes the entry. The following example creates a RowFilter
that will include any entries containing the string "foo" or the string "bar":
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);
M
- the type of the model to which the RowFilter
appliesI
- the type of the identifier passed to the RowFilter
filters
- the RowFilter
s to testRowFilter
implementing the specified criteriaIllegalArgumentException
- if any of the filters are null
NullPointerException
- if filters
is nullpublic static <M, I> RowFilter<M,I> andFilter(Iterable<? extends RowFilter<? super M,? super I>> filters)
RowFilter
that includes entries if all of the supplied filters include the entry. The following example creates a RowFilter
that will include any entries containing the string "foo" and the string "bar":
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);
M
- the type of the model the RowFilter
applies toI
- the type of the identifier passed to the RowFilter
filters
- the RowFilter
s to testRowFilter
implementing the specified criteriaIllegalArgumentException
- if any of the filters are null
NullPointerException
- if filters
is nullpublic static <M, I> RowFilter<M,I> notFilter(RowFilter<M,I> filter)
RowFilter
that includes entries if the supplied filter does not include the entry.M
- the type of the model to which the RowFilter
appliesI
- the type of the identifier passed to the RowFilter
filter
- the RowFilter
to negateRowFilter
implementing the specified criteriaIllegalArgumentException
- if filter
is null
public abstract boolean include(RowFilter.Entry<? extends M,? extends I> entry)
The entry
argument is valid only for the duration of the invocation. Using entry
after the call returns results in undefined behavior.
entry
- a non-null
object that wraps the underlying object from the model
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.desktop/javax/swing/RowFilter.html