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