Module java.desktop
Package javax.swing

Class RowFilter<M,I>

java.lang.Object
javax.swing.RowFilter<M,I>
类型参数:
M - 模型的类型; 例如 PersonModel
I - 标识符的类型; 当使用 TableRowSorter 时,这将是 Integer

public abstract class RowFilter<M,I> extends Object
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

    Nested Classes
    Modifier and Type
    Class
    Description
    static enum 
    一些默认 RowFilter 支持的可能比较值的枚举。
    static class 
    Entry 对象传递给 RowFilter 的实例,允许过滤器获取条目数据的值,从而确定是否应显示该条目。
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    子类调用的构造函数。
  • Method Summary

    Modifier and Type
    Method
    Description
    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)
    返回一个 RowFilter,如果至少有一个 Date 值符合指定的条件,则包含该条目。
    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)
    返回一个 RowFilter,如果至少有一个 Number 值符合指定的条件,则包含该条目。
    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

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • RowFilter

      protected RowFilter()
      子类调用的构造函数。
  • Method Details

    • regexFilter

      public static <M, I> RowFilter<M,I> regexFilter(String regex, int... indices)
      返回一个使用正则表达式来确定要包含哪些条目的 RowFilter。只包含至少一个匹配值的条目。例如,以下创建一个 RowFilter,其中包含至少一个以 "a" 开头的值的条目:
         RowFilter.regexFilter("^a");
       

      返回的过滤器使用 Matcher.find() 来测试是否包含。要测试精确匹配,请使用字符 '^' 和 '$' 分别匹配字符串的开头和结尾。例如,"^foo$" 仅包含字符串完全为 "foo" 的行,而不包括例如 "food"。有关支持的正则表达式构造的完整描述,请参阅 Pattern

      类型参数:
      M - RowFilter 应用于的模型的类型
      I - 传递给 RowFilter 的标识符的类型
      参数:
      regex - 要过滤的正则表达式
      indices - 要检查的值的索引。如果未提供,则评估所有值
      返回:
      实现指定条件的 RowFilter
      抛出:
      NullPointerException - 如果 regexnull
      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 - 如果 datenull
      IllegalArgumentException - 如果任何 indices 小于 0 或 typenull
      参见:
    • 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,typenullnumbernull
    • 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

      public static <M, I> RowFilter<M,I> notFilter(RowFilter<M,I> filter)
      返回一个 RowFilter,如果提供的过滤器不包含该条目,则包含该条目。
      类型参数:
      M - RowFilter 应用的模型类型
      I - 传递给 RowFilter 的标识符类型
      参数:
      filter - 要否定的 RowFilter
      返回:
      实现指定条件的 RowFilter
      抛出:
      IllegalArgumentException - 如果 filternull
    • include

      public abstract boolean include(RowFilter.Entry<? extends M,? extends I> entry)
      如果应显示指定的条目,则返回 true;如果应隐藏该条目,则返回 false。

      仅在调用期间,entry 参数有效。在调用返回结果后使用 entry 会导致未定义的行为。

      参数:
      entry - 包装模型中的基础对象的非 null 对象
      返回:
      如果应显示该条目,则返回 true