java.lang.Object
javax.swing.RowFilter<M,I>
- 类型参数:
-
M
- 模型的类型; 例如PersonModel
-
I
- 标识符的类型; 当使用TableRowSorter
时,这将是Integer
RowFilter
用于过滤模型中的条目,以便它们不显示在视图中。例如,与 JTable
关联的 RowFilter
可能只允许包含特定字符串的列的行。"条目" 的含义取决于组件类型。例如,当过滤器与 JTable
关联时,一个条目对应一行;当与 JTree
关联时,一个条目对应一个节点。
子类必须重写 include
方法以指示是否应在视图中显示该条目。 Entry
参数可用于获取该条目中每列的值。以下示例显示了一个 include
方法,该方法仅允许包含以字符串 "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")) { // 该值以 "a" 开头,包含它 return true; } } // 没有列以 "a" 开头;返回 false 以便不显示此条目 return false; } };
RowFilter
有两个形式类型参数,允许您为特定模型创建一个 RowFilter
。例如,以下假设一个特定模型,该模型包装了类型为 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) { // 返回 true 表示应显示此行。 return true; } // 年龄是 <= 20,不显示它。 return false; } }; PersonModel model = createPersonModel(); TableRowSorter<PersonModel> sorter = new TableRowSorter<PersonModel>(model); sorter.setRowFilter(ageFilter);
- 自 JDK 版本:
- 1.6
- 参见:
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic enum
一些默认RowFilter
支持的可能比较值的枚举。static class
Entry
对象传递给RowFilter
的实例,允许过滤器获取条目数据的值,从而确定是否应显示该条目。 -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic <M,
I> RowFilter <M, I> 返回一个RowFilter
,如果所有提供的过滤器都包含该条目,则包含该条目。static <M,
I> RowFilter <M, I> dateFilter
(RowFilter.ComparisonType type, Date date, int... indices) 返回一个RowFilter
,如果至少有一个Date
值符合指定的条件,则包含该条目。abstract boolean
include
(RowFilter.Entry<? extends M, ? extends I> entry) 如果指定的条目应显示,则返回 true;如果应隐藏该条目,则返回 false。static <M,
I> RowFilter <M, I> 返回一个RowFilter
,如果提供的过滤器不包含该条目,则包含该条目。static <M,
I> RowFilter <M, I> numberFilter
(RowFilter.ComparisonType type, Number number, int... indices) 返回一个RowFilter
,如果至少有一个Number
值符合指定的条件,则包含该条目。static <M,
I> RowFilter <M, I> 返回一个RowFilter
,如果任何提供的过滤器包含该条目,则包含该条目。static <M,
I> RowFilter <M, I> regexFilter
(String regex, int... indices) 返回一个使用正则表达式来确定要包含哪些条目的RowFilter
。
-
Constructor Details
-
RowFilter
protected RowFilter()子类调用的构造函数。
-
-
Method Details
-
regexFilter
返回一个使用正则表达式来确定要包含哪些条目的RowFilter
。只包含至少一个匹配值的条目。例如,以下创建一个RowFilter
,其中包含至少一个以 "a" 开头的值的条目:RowFilter.regexFilter("^a");
返回的过滤器使用
Matcher.find()
来测试是否包含。要测试精确匹配,请使用字符 '^' 和 '$' 分别匹配字符串的开头和结尾。例如,"^foo$" 仅包含字符串完全为 "foo" 的行,而不包括例如 "food"。有关支持的正则表达式构造的完整描述,请参阅Pattern
。- 类型参数:
-
M
-RowFilter
应用于的模型的类型 -
I
- 传递给RowFilter
的标识符的类型 - 参数:
-
regex
- 要过滤的正则表达式 -
indices
- 要检查的值的索引。如果未提供,则评估所有值 - 返回:
-
实现指定条件的
RowFilter
- 抛出:
-
NullPointerException
- 如果regex
为null
-
IllegalArgumentException
- 如果任何indices
小于 0 -
PatternSyntaxException
- 如果regex
不是有效的正则表达式。 - 参见:
-
dateFilter
public static <M,I> RowFilter<M,I> dateFilter(RowFilter.ComparisonType type, Date date, int... indices) 返回一个RowFilter
,如果至少有一个Date
值符合指定的条件,则包含该条目。例如,以下RowFilter
仅包含当前日期之后的至少一个日期值的条目:RowFilter.dateFilter(ComparisonType.AFTER, new Date());
- 类型参数:
-
M
-RowFilter
应用于的模型的类型 -
I
- 传递给RowFilter
的标识符的类型 - 参数:
-
type
- 要执行的比较类型 -
date
- 要比较的日期 -
indices
- 要检查的值的索引。如果未提供,则评估所有值 - 返回:
-
实现指定条件的
RowFilter
- 抛出:
-
NullPointerException
- 如果date
为null
-
IllegalArgumentException
- 如果任何indices
小于 0 或type
为null
- 参见:
-
numberFilter
public static <M,I> RowFilter<M,I> numberFilter(RowFilter.ComparisonType type, Number number, int... indices) 返回一个RowFilter
,如果至少有一个Number
值符合指定的条件,则包含该条目。例如,以下过滤器仅包含至少一个数字值等于 10 的条目:RowFilter.numberFilter(ComparisonType.EQUAL, 10);
- 类型参数:
-
M
-RowFilter
应用于的模型的类型 -
I
- 传递给RowFilter
的标识符的类型 - 参数:
-
type
- 要执行的比较类型 -
number
- 要与之比较的Number
值 -
indices
- 要检查的值的索引。如果未提供,则评估所有值 - 返回:
-
实现指定条件的
RowFilter
- 抛出:
-
IllegalArgumentException
- 如果任何indices
小于 0,type
为null
或number
为null
-
orFilter
public static <M,I> RowFilter<M,I> orFilter(Iterable<? extends RowFilter<? super M, ? super I>> filters) 返回一个RowFilter
,如果任何提供的过滤器包含该条目,则包含该条目。以下示例创建一个
RowFilter
,将包含包含字符串 "foo" 或字符串 "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
-RowFilter
应用于的模型的类型 -
I
- 传递给RowFilter
的标识符的类型 - 参数:
-
filters
- 要测试的RowFilter
- 返回:
-
实现指定条件的
RowFilter
- 抛出:
-
IllegalArgumentException
- 如果任何过滤器为null
-
NullPointerException
- 如果filters
为 null - 参见:
-
andFilter
public static <M,I> RowFilter<M,I> andFilter(Iterable<? extends RowFilter<? super M, ? super I>> filters) 返回一个RowFilter
,如果所有提供的过滤器都包含该条目,则包含该条目。以下示例创建一个
RowFilter
,将包含包含字符串 "foo" 和字符串 "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
-RowFilter
应用的模型类型 -
I
- 传递给RowFilter
的标识符类型 - 参数:
-
filters
- 要测试的RowFilter
- 返回:
-
实现指定条件的
RowFilter
- 抛出:
-
IllegalArgumentException
- 如果任何过滤器为null
-
NullPointerException
- 如果filters
为 null - 参见:
-
notFilter
返回一个RowFilter
,如果提供的过滤器不包含该条目,则包含该条目。- 类型参数:
-
M
-RowFilter
应用的模型类型 -
I
- 传递给RowFilter
的标识符类型 - 参数:
-
filter
- 要否定的RowFilter
- 返回:
-
实现指定条件的
RowFilter
- 抛出:
-
IllegalArgumentException
- 如果filter
为null
-
include
如果应显示指定的条目,则返回 true;如果应隐藏该条目,则返回 false。仅在调用期间,
entry
参数有效。在调用返回结果后使用entry
会导致未定义的行为。- 参数:
-
entry
- 包装模型中的基础对象的非null
对象 - 返回:
- 如果应显示该条目,则返回 true
-