Скрытие пустых родителей - 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;
к каждому элементу и каждому родителю и вернуть его фильтром, но ни один из этих методов меня не устраивает. Они ИМХО слишком сложны для этой задачи.
Итак, мой вопрос: есть ли простой способ добиться того, чего я хочу?
С уважением.
1 ответ
Взгляните на это. Это может помочь вам: Блог Vogella: мне нравятся мои деревья, отфильтрованные (Eclipse FilteredTree)