【问题标题】:NatTable Filter using Regex使用正则表达式的 NatTable 过滤器
【发布时间】:2017-07-18 12:16:12
【问题描述】:

我对在 NatTable 过滤器中使用正则表达式很感兴趣。我根据以下有用的链接设置了我的代码:

http://www.vogella.com/tutorials/NatTable/article.html#exercise-adding-a-filter-functionality-to-a-nattable

https://www.eclipse.org/forums/index.php/t/1069806/

据我所知,基本上可以归结为将以下代码添加到您现有的过滤器中:

    FilterRowHeaderComposite<T> filterRowHeaderLayer = new
      FilterRowHeaderComposite<>(filterStrategy,
            sortHeaderLayer, columnHeaderDataLayer.
            getDataProvider(), configRegistry);

    int rowNum = 2;

    configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR,
      new FilterRowTextCellEditor(), DisplayMode.NORMAL, 
      FilterRowDataLayer.FILTER_ROW_COLUMN_LABEL_PREFIX + rowNum);

    configRegistry.registerConfigAttribute(FilterRowConfigAttributes.
      TEXT_MATCHING_MODE, TextMatchingMode.REGULAR_EXPRESSION, 
      DisplayMode.NORMAL,           
      FilterRowDataLayer.FILTER_ROW_COLUMN_LABEL_PREFIX + rowNum);

    configRegistry.registerConfigAttribute(CellConfigAttributes.
      DISPLAY_CONVERTER, new FilterRowRegularExpressionConverter(), 
      DisplayMode.NORMAL,            
      FilterRowDataLayer.FILTER_ROW_COLUMN_LABEL_PREFIX + rowNum);

过滤似乎在某些情况下有效,而在其他情况下无效。例如,假设我有一个包含数据“这是一个测试”的单元格。如果我使用表达式 *t,它将找到行(这是我所期望的)。如果我使用表达式 *x,它将找不到该行(这是我所期望的)。如果我使用表达式 ^(123) 它将找不到该行(这不是我所期望的)。我做错了什么吗?

谢谢!

【问题讨论】:

    标签: nattable


    【解决方案1】:

    我认为问题出在正则表达式中。似乎缺少基数。使用 [^123]* 它可以按您的预期工作。

    例如,如果您测试 _6031_GlazedListsFilterExample 并为 Housenumber 列插入 [^abc],您将看到所有只有一位数字值的条目。添加 * 所有行都会出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 2021-08-24
      • 1970-01-01
      相关资源
      最近更新 更多