【问题标题】:NatTable FilteringNatTable 过滤
【发布时间】:2016-11-30 15:58:48
【问题描述】:

我正在尝试同时对 NatTable 应用两种不同类型的过滤。每个过滤器本身都可以正常工作,但是当它们组合在一起时,它们并没有像我预期的那样工作。

  • 我要做的第一件事是调用 FilterList.setMatcher() 以根据外部条件减少行数
  • 接下来我要做的是使用 FilterRowHeaderComposite 应用进一步过滤,但它似乎忽略了输入(即使我在过滤器标题单元格中看到输入/图标)并且没有应用过滤器

下面是一些基本的代码 sn-ps,显示了我的设置...

public void basicSetup() {
    eventList = GlazedLists.eventList(values);
    TransformedList<T, T> rowObjectsGlazedList = GlazedLists.
      threadSafeList(eventList);
    sortedList = new SortedList<>(rowObjectsGlazedList, myComparator<>());
    filterList = new FilterList<>(sortedList);

    //... code ommitted

    FilterRowHeaderComposite<T> filterRowHeaderLayer = new 
      FilterRowHeaderComposite<>(
            new DefaultGlazedListsFilterStrategy<T>(bodyLayerStack.
              getFilterList(), columnPropertyAccessor, configRegistry),
            sortHeaderLayer, columnHeaderDataLayer.getDataProvider(), 
            configRegistry);

}

public void applyExternalFilter() {
    getBodyLayerStack().getFilterList().setMatcher(myCriteria);
}

public void resetExternalFilter() {
    getBodyLayerStack().getFilterList().setMatcher(null);
}

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: java nattable


    【解决方案1】:

    您正在尝试通过过滤器行将程序化应用过滤器与用户应用过滤器混合。这不起作用,因为过滤器行处理FilterList 上的匹配器,并且无法识别哪些过滤器是由谁添加的。

    要支持将静态过滤器与用户定义的过滤器混合使用,您需要使用支持添加额外静态过滤器的DefaultGlazedListsStaticFilterStrategy

    NatTable 示例应用程序 -> 教程示例 -> GlazedLists -> 过滤器 -> GlazedListsStaticFilterExample 中提供了一个示例 (_6033_GlazedListsStaticFilterExample.java)

    DefaultGlazedListsStaticFilterStrategy filterStrategy = new DefaultGlazedListsStaticFilterStrategy(
                        bodyLayerStack.getFilterList(),
                        columnPropertyAccessor,
                        configRegistry);
    
    FilterRowHeaderComposite filterRowHeaderLayer =
            new FilterRowHeaderComposite(
                    filterStrategy,
                    columnHeaderLayer,
                    columnHeaderDataLayer.getDataProvider(),
                    configRegistry);
    

    然后可以通过

    应用静态过滤器
    filterStrategy#addStaticFilter(Matcher);
    

    目前没有明确的方法可用。只能删除以前应用的过滤器。但请随意创建增强票证以进行清除并提供补丁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      • 2016-09-25
      • 2017-07-18
      • 2020-01-18
      • 2016-12-02
      • 2015-12-19
      • 2019-04-09
      相关资源
      最近更新 更多