Скрытие пустых родителей — TreeViewer JFace

Я создаю средство просмотра дерева в 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; к каждому элементу и каждому родителю и верните его фильтром, но ни один из этих методов меня не удовлетворяет. ИМХО они слишком сложны для этой задачи.

Итак, мой вопрос: есть ли простой способ добиться того, чего я хочу?

С Уважением.


person m4tx    schedule 07.06.2013    source источник


Ответы (1)