В моем понимании, когда мы устанавливаем Input для объекта для дерева, это
объект передается ContentProvider. Элементы выходят из
ContentProvider будет фильтроваться различными фильтрами. После этого,
остальные элементы будут отсортированы. Наконец, виджет дерева будет
возьмите эти элементы и покажите их. Это правильно?
Да, это правильно.
Explanation
Зритель никогда не общается напрямую с объектами данных / домена. Например, TreeViewer не общается с объектами домена напрямую. Вместо этого он использует другой объект, называемый ContentProvider, и этот объект использует ваши доменные объекты.
Так же, как существует объект поставщика контента, который получает дочерние элементы узлов дерева, когда дело доходит до фактического отображения узлов, у средства просмотра дерева есть еще один вспомогательный объект: поставщик меток.
Аналогично для обработки таблиц в JFace есть TableViewer. Как и TreeViewer, у него есть вход (корневой объект), поставщик контента и поставщик меток. Это проще, чем просмотрщик дерева, так как ему не нужно иметь дело с деревьями.
Теперь, если вы посмотрите на реализацию TreeViwer по умолчанию, то обнаружите, что в методе createChildren()
(который вызывается при расширении узла) есть вызов getSortedChildren()
, который в основном применяет все фильтры к предоставленный ввод (и по требованию, т.е. когда узел расширяется) и, наконец, применяет предоставленный вами сортировщик. Как только все это будет сделано, поставщик этикеток войдет в картину.
Ссылки:
- Использование JFace и SWT в автономном режиме
- Использование реестра образов JFace