NatTable 过滤
NatTable Filtering
我正在尝试同时对 NatTable 应用两种不同类型的过滤。每个过滤器都可以单独使用,但当它们组合在一起时,它们无法像我预期的那样工作。
- 我做的第一件事是调用 FilterList.setMatcher() 以根据外部条件减少行数
- 接下来我要做的是使用 FilterRowHeaderComposite 应用进一步的过滤,但它似乎忽略了输入(即使我在过滤器 header 单元格中看到 input/icon)并且没有过滤器已应用
下面是一些基本代码片段,展示了我的设置...
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);
目前没有明确的方法可用。只能删除以前应用的过滤器。但是请随意创建一个用于清除的增强票并提供一个补丁。
我正在尝试同时对 NatTable 应用两种不同类型的过滤。每个过滤器都可以单独使用,但当它们组合在一起时,它们无法像我预期的那样工作。
- 我做的第一件事是调用 FilterList.setMatcher() 以根据外部条件减少行数
- 接下来我要做的是使用 FilterRowHeaderComposite 应用进一步的过滤,但它似乎忽略了输入(即使我在过滤器 header 单元格中看到 input/icon)并且没有过滤器已应用
下面是一些基本代码片段,展示了我的设置...
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);
目前没有明确的方法可用。只能删除以前应用的过滤器。但是请随意创建一个用于清除的增强票并提供一个补丁。