Я создаю средство просмотра дерева в JFace и хочу чего-то добиться.
Я использую фильтр в нем. Фильтр работает хорошо, но не идеально. Когда я использую метод filter.expandAll()
, фильтр фильтрует все элементы дерева, но есть кое-что, что действительно раздражает. Хотя он фильтрует все элементы дерева, он не скрывает родителей элементов, которые теперь становятся пустыми.
Пример:
Как видите, есть только один элемент, соответствующий фильтру: «Общее/Карта/Новое». Но теперь показаны все родители, хотя на самом деле они не содержат детей.
Часть кода моего фильтра:
if (element instanceof HotkeyCategory) {
return true;
} else if (element instanceof HotkeyItem) {
return ((HotkeyItem) element).getLabel().toLowerCase()
.matches(searchString.toLowerCase());
}
return false;
Как вы можете видеть выше, я разрешаю всем родителям детей. Но, может быть, есть какой-то автоматический способ скрыть пустых родителей?
У меня были некоторые идеи. Выполните фильтрацию перед перенаправлением в средство просмотра дерева и создайте ArrayList с разрешенными элементами и их родителями ИЛИ добавьте boolean show;
к каждому элементу и каждому родителю и верните его фильтром, но ни один из этих методов меня не удовлетворяет. ИМХО они слишком сложны для этой задачи.
Итак, мой вопрос: есть ли простой способ добиться того, чего я хочу?
С Уважением.