Class RowFilter<M,I>
- Type Parameters:
M- the type of the model; for examplePersonModelI- the type of the identifier; when usingTableRowSorterthis will beInteger
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 Persons
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);
- Since:
- 1.6
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumEnumeration of the possible comparison values supported by some of the defaultRowFilters.static classAnEntryobject is passed to instances ofRowFilter, allowing the filter to get the value of the entry's data, and thus to determine whether the entry should be shown. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic <M,I> RowFilter <M, I> Returns aRowFilterthat includes entries if all of the supplied filters include the entry.static <M,I> RowFilter <M, I> dateFilter(RowFilter.ComparisonType type, Date date, int... indices) Returns aRowFilterthat includes entries that have at least oneDatevalue meeting the specified criteria.abstract booleaninclude(RowFilter.Entry<? extends M, ? extends I> entry) Returns true if the specified entry should be shown; returns false if the entry should be hidden.static <M,I> RowFilter <M, I> Returns aRowFilterthat includes entries if the supplied filter does not include the entry.static <M,I> RowFilter <M, I> numberFilter(RowFilter.ComparisonType type, Number number, int... indices) Returns aRowFilterthat includes entries that have at least oneNumbervalue meeting the specified criteria.static <M,I> RowFilter <M, I> Returns aRowFilterthat includes entries if any of the supplied filters includes the entry.static <M,I> RowFilter <M, I> regexFilter(String regex, int... indices) Returns aRowFilterthat uses a regular expression to determine which entries to include.
-
Constructor Details
-
RowFilter
protected RowFilter()Constructor for subclasses to call.
-
-
Method Details
-
regexFilter
Returns aRowFilterthat 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 aRowFilterthat 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". SeePatternfor a complete description of the supported regular-expression constructs.- Type Parameters:
M- the type of the model to which theRowFilterappliesI- the type of the identifier passed to theRowFilter- Parameters:
regex- the regular expression to filter onindices- the indices of the values to check. If not supplied all values are evaluated- Returns:
- a
RowFilterimplementing the specified criteria - Throws:
NullPointerException- ifregexisnullIllegalArgumentException- if any of theindicesare < 0PatternSyntaxException- ifregexis not a valid regular expression.- See Also:
-
dateFilter
public static <M,I> RowFilter<M,I> dateFilter(RowFilter.ComparisonType type, Date date, int... indices) Returns aRowFilterthat includes entries that have at least oneDatevalue meeting the specified criteria. For example, the followingRowFilterincludes only entries with at least one date value after the current date:RowFilter.dateFilter(ComparisonType.AFTER, new Date());
- Type Parameters:
M- the type of the model to which theRowFilterappliesI- the type of the identifier passed to theRowFilter- Parameters:
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 evaluated- Returns:
- a
RowFilterimplementing the specified criteria - Throws:
NullPointerException- ifdateisnullIllegalArgumentException- if any of theindicesare < 0 ortypeisnull- See Also:
-
numberFilter
public static <M,I> RowFilter<M,I> numberFilter(RowFilter.ComparisonType type, Number number, int... indices) Returns aRowFilterthat includes entries that have at least oneNumbervalue 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);
- Type Parameters:
M- the type of the model to which theRowFilterappliesI- the type of the identifier passed to theRowFilter- Parameters:
type- the type of comparison to performnumber- aNumbervalue to compare againstindices- the indices of the values to check. If not supplied all values are evaluated- Returns:
- a
RowFilterimplementing the specified criteria - Throws:
IllegalArgumentException- if any of theindicesare < 0,typeisnullornumberisnull
-
orFilter
public static <M,I> RowFilter<M,I> orFilter(Iterable<? extends RowFilter<? super M, ? super I>> filters) Returns aRowFilterthat includes entries if any of the supplied filters includes the entry.The following example creates a
RowFilterthat 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);- Type Parameters:
M- the type of the model to which theRowFilterappliesI- the type of the identifier passed to theRowFilter- Parameters:
filters- theRowFilters to test- Returns:
- a
RowFilterimplementing the specified criteria - Throws:
IllegalArgumentException- if any of the filters arenullNullPointerException- iffiltersis null- See Also:
-
andFilter
public static <M,I> RowFilter<M,I> andFilter(Iterable<? extends RowFilter<? super M, ? super I>> filters) Returns aRowFilterthat includes entries if all of the supplied filters include the entry.The following example creates a
RowFilterthat 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);- Type Parameters:
M- the type of the model theRowFilterapplies toI- the type of the identifier passed to theRowFilter- Parameters:
filters- theRowFilters to test- Returns:
- a
RowFilterimplementing the specified criteria - Throws:
IllegalArgumentException- if any of the filters arenullNullPointerException- iffiltersis null- See Also:
-
notFilter
Returns aRowFilterthat includes entries if the supplied filter does not include the entry.- Type Parameters:
M- the type of the model to which theRowFilterappliesI- the type of the identifier passed to theRowFilter- Parameters:
filter- theRowFilterto negate- Returns:
- a
RowFilterimplementing the specified criteria - Throws:
IllegalArgumentException- iffilterisnull
-
include
Returns true if the specified entry should be shown; returns false if the entry should be hidden.The
entryargument is valid only for the duration of the invocation. Usingentryafter the call returns results in undefined behavior.- Parameters:
entry- a non-nullobject that wraps the underlying object from the model- Returns:
- true if the entry should be shown
-