Реализация дерева с использованием NatTable
Я пытаюсь переключиться с JFace TreeViewer на NatTable. К сожалению, я не нашел много документации по реализации деревьев с помощью NatTable. Итак, у меня есть несколько вопросов
С TreeViewer я использовал
setInput()
предоставить новый вклад. Как я могу добиться того же с NatTable? Это правильный способ позвонитьclear()
а такжеaddAll()
на базовый источник данныхList
? (Я использую GlazedLists)Я пользуюсь описанным
clear()
/addAll()
способ передачи новых данных после запроса к базе данных. И после того, как это расширенное состояние дерева потеряно, все узлы свернуты. С JFace TreeViewer я использовалgetExpandedElements()
/setExpandedElements()
сохранить расширенное состояние. Есть ли что-то подобное в NatTable?Можно ли загружать дочерние узлы дерева только при щелчке по родительскому узлу? Я не могу заранее построить все данные дерева, потому что у меня могут быть циклы (ну, строго говоря, мои данные на самом деле не дерево, но удобно отображать их как дерево)
UPD: Не уверен, стоит ли мне задавать это здесь или создать отдельный вопрос
- У меня проблемы с сортировкой. Я нашел подобное обсуждение здесь https://www.eclipse.org/forums/index.php?t=msg&th=489524 но у меня до сих пор нет глубокого понимания.
Моя проблема: после сортировки по любому столбцу, кроме столбца "дерево", дочерние узлы могут перейти к неверному родителю. Хотя порядок элементов правильный на всех уровнях иерархии. я использую SortableTreeComparator
и в качестве treeComparator
Я использую свой собственный компаратор (не GlazedLists.beanPropertyComparator
как в примере). Что здесь может быть не так?
2 ответа
- Да, это хорошо, и даже рекомендуется сделать это. NatTable визуализирует данные. Неважно, откуда это, по крайней мере, если
IDataProvider
может предоставить данные в двухмерном виде. Из-за наших уровней абстракции у нас нетsetInput()
в NatTable. С 1.4 мы открыли API, чтобы иметь возможность установитьIDataProvider
кDataLayer
во время выполнения, что-то похожее. - Вы должны реализовать
ExpansionModel
это помнит состояние расширения. В NatTable у нас то же самое вGroupByExpansionModel
по той же причине. - Я еще не делал этого в NatTable, но часто видел это. Так что да, это возможно. IIRC вам нужно реализовать кастом
ITreeRowModel
который выполняет отложенную загрузку при расширении, если это необходимо. Я бы предложил продлитьGlazedListTreeRowModel
и проверьте различные методы расширения, которые вам нужно переопределить.
Во-первых, вы можете посмотреть примеры NatTable и посмотреть, как реализовано дерево.
- Да, список источников данных - это место для размещения и управления вашими объектами данных.
- Для управления расширенным состоянием вы можете использовать
ca.odell.glazedlists.TreeList.ExpansionModel
которая является частьюTreeList
вы используете в качестве ввода. - Насколько я знаю, одним из главных преимуществ NatTable является возможность загружать данные по требованию, только когда они должны стать видимыми. Это поведение по умолчанию.