NatTable Filtering
Я пытаюсь одновременно применить два разных типа фильтрации к 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 -> Filter -> GlazedListsStaticFilterExample (_6033_GlazedListsStaticFilterExample.java)
DefaultGlazedListsStaticFilterStrategy filterStrategy = new DefaultGlazedListsStaticFilterStrategy(
bodyLayerStack.getFilterList(),
columnPropertyAccessor,
configRegistry);
FilterRowHeaderComposite filterRowHeaderLayer =
new FilterRowHeaderComposite(
filterStrategy,
columnHeaderLayer,
columnHeaderDataLayer.getDataProvider(),
configRegistry);
Затем можно применить статический фильтр через
filterStrategy#addStaticFilter(Matcher);
В настоящее время нет четкого доступного метода. Можно удалить только предыдущий примененный фильтр. Но не стесняйтесь создавать билет улучшения для очистки и предоставлять патч.