我试图同时将两种不同类型的过滤应用于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);
}


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

最佳答案

您正在尝试通过过滤器行将程序应用的过滤器与用户应用的过滤器混合。由于过滤器行处理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);


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

09-27 00:07