2016-11-29 27 views
0

我想同时将两种不同类型的筛选应用于NatTable。每个过滤器都能正常工作,但它们在组合时并不像我预期的那样工作。NatTable筛选

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

下面是一些基本的代码片段,显示我有什么设置...

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); 
} 

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

回答

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); 

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