Есть ли лучший способ использовать сортировку и фильтрацию с ILazyTreeContentProvider - PullRequest
5 голосов
/ 26 ноября 2009

Очевидно, что при использовании ILazyTree(TreePath)ContentProvider сортировка и фильтрация не поддерживаются TreeViewers. Поэтому установка ViewerFilters или Sorters/Comparators в TreeView не принесет пользы. Возможно, это связано с незнанием всех элементов, включая те, которые не видны в данный момент.

В поддержку этого утверждения приводится выдержка из org.eclipse.jface.viewers.TreeViewer класса javadoc:

Если поставщик контента является ILazyTreeContentProvider или ILazyTreePathContentProvider, лежащее в основе дерево должно быть созданный с использованием бита стиля {@link SWT # VIRTUAL}, средство просмотра дерева не будет поддержка сортировки или фильтрации, и поиск по хешу должен быть включен путем вызова {@link #setUseHashlookup (логическое)}.

Единственное решение, которое я вижу на данный момент, - это получить дочерние элементы для каждого уже заказанного узла. Если вам нужна динамическая сортировка, т. Е. Возможность переключать порядок сортировки в порядке desc или asc во время выполнения, то вам нужно придумать собственное решение для этого, например, отслеживая своего рода логический флаг при заполнении и обновлении потомков.

Вы знаете, возможно, о лучших решениях, возможно, больше jface API с участием?

1 Ответ

6 голосов
/ 26 ноября 2009

Действительно, сортировка для VIRTUAL-TreeViewer невозможна независимо от того, используете ли вы IStructuredContentProvider или лентяй, как отмечено в этой теме :

Вам придется выполнить сортировку самостоятельно (в вашей модели).
Основное предположение заключается в том, что элементы могут даже не быть в памяти.

Вещи могут измениться в e4 (из этого сообщения в июне 2009 года):

ИМХО, реализация JFace Virtual Table и Tree не так хороша, как не виртуальная, так что я остаюсь в стороне от нее и не использую ее ни в одном из своих проектов.

[...] иметь виртуальные таблицы бессмысленно, потому что с точки зрения дизайна пользовательского интерфейса бессмысленно показывать пользователю 10.000 элементов и даже более важно, потому что модель остается резидентным в вашей памяти, показывая, что большие таблицы с JFace могут съесть все ваше пространство кучи
( Мы надеемся придумать обновленный набор Зрителей в E4, которые исправят такие проблемы ).
См этот проект и ошибка 260451 .
(больше общих ошибок: 167436 и 262160 )

Прямо сейчас:

мы создаем сильную ссылку в средстве просмотра после того, как таблица запросила его.

ИМХО, гораздо лучше дать пользователю: - пейджинг - интеллектуальные возможности фильтрации

вместо отображения миллиона результатов, а затем, например, в случае CDO (связанных объектов данных) фильтрация выполняется на сервере с использованием их нового API запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...