You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NatTable多行文本过滤失效问题求助及解决方案咨询

过滤功能对多行文本/ASCII字符失效,仅单行单元格正常工作

我的过滤功能仅能正确处理单行单元格,对多行文本甚至ASCII字符都无效。

示例行(含4列)

[1, WELD FIL.. ... MCW430
(REP.. ..bL), 各溶接.. ..と。(..430NbL), X] 
  • (REP.. ..bL) 属于第2列,但处于新行
  • X 字符属于第4列

创建NatTable的代码

private NatTable createTable(Composite parent, List<TableLine> tLines, String[][] propertyNames,
      PropertyToLabels[] propToLabels, TableParams params, TextMatcherEditor<TableLine>editor, boolean openableParts) {
    
    // another code: bodyLayerStack, bodyDataLayer
    // another code: set row heights, set column widths
    // another code: columnHeaderDataLayer    
    // another code: include table headers

    CompositeLayer composite = null;
    if( propertyNames != null ) {
      ColumnHeaderLayer columnHeaderLayer =
          new ColumnHeaderLayer(
              columnHeaderDataLayer,
              bodyLayerStack,
              (SelectionLayer)null);
      columnHeaderLayer.addConfiguration(NatTableLayerConfigurations.getColumnHeaderLayerConfiguration(false));

      SortHeaderLayer<TableLine> sortHeaderLayer =
          new SortHeaderLayer<TableLine>(
              columnHeaderLayer,
              new GlazedListsSortModel<TableLine>(
                  bodyLayerStack.getSortedList(),
                  getSortingColumnPropAccessor(propertyNames[0]),
                  configRegistry,
                  columnHeaderDataLayer));

      // another code: setChildLayer, add configurations

    natTable.configure();    
    editor.setFilterator(new TextFilterator<TableLine>() {

      @Override
      public void getFilterStrings(List<String> baseList, TableLine element) {
        for( int i = 0; i < element.getLength(); i++ )
          baseList.add("" + element.getObjectByColumn(i));
      }
    });
    editor.setMode(TextMatcherEditor.REGULAR_EXPRESSION);
    bodyLayerStack.getFilterList().setMatcherEditor(editor);

    NatTableContentProvider.addNatTableData(natTable, bodyLayerStack.getSelectionLayer(), bodyLayerStack.getBodyDataProvider());
    
    return natTable;
  }

调试发现的问题

在ca.odell.glazedlists.impl.filter.TextMatchers.matches(List<String>, TextFilterator<? super E>, SearchTerm<E>[], TextSearchStrategy[], E)方法中,当过滤字符w时,未命中if(filterString != null && textSearchStrategy.indexOf(filterString.toString()) != -1)条件,但第2列的字符串明明以W开头。

我使用的不区分大小写过滤正则为(?i).*w.*(?-i)。

问题咨询

请问是否有可行的替代方案或配置?是否需要在过滤前转换数据?若需转换,该如何操作?由于GlazedLists相关类为final,无法重写。

内容的提问来源于stack exchange,提问作者stojelenov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:15:40