Реализация дерева с использованием NatTable

Я пытаюсь переключиться с JFace TreeViewer на NatTable. К сожалению, я не нашел много документации по реализации деревьев с помощью NatTable. Итак, у меня есть несколько вопросов

  1. С TreeViewer я использовал setInput() предоставить новый вклад. Как я могу добиться того же с NatTable? Это правильный способ позвонить clear() а также addAll() на базовый источник данных List? (Я использую GlazedLists)

  2. Я пользуюсь описанным clear()/addAll() способ передачи новых данных после запроса к базе данных. И после того, как это расширенное состояние дерева потеряно, все узлы свернуты. С JFace TreeViewer я использовал getExpandedElements() / setExpandedElements() сохранить расширенное состояние. Есть ли что-то подобное в NatTable?

  3. Можно ли загружать дочерние узлы дерева только при щелчке по родительскому узлу? Я не могу заранее построить все данные дерева, потому что у меня могут быть циклы (ну, строго говоря, мои данные на самом деле не дерево, но удобно отображать их как дерево)

UPD: Не уверен, стоит ли мне задавать это здесь или создать отдельный вопрос

  1. У меня проблемы с сортировкой. Я нашел подобное обсуждение здесь https://www.eclipse.org/forums/index.php?t=msg&th=489524 но у меня до сих пор нет глубокого понимания.

Моя проблема: после сортировки по любому столбцу, кроме столбца "дерево", дочерние узлы могут перейти к неверному родителю. Хотя порядок элементов правильный на всех уровнях иерархии. я использую SortableTreeComparator и в качестве treeComparator Я использую свой собственный компаратор (не GlazedLists.beanPropertyComparator как в примере). Что здесь может быть не так?

2 ответа

  1. Да, это хорошо, и даже рекомендуется сделать это. NatTable визуализирует данные. Неважно, откуда это, по крайней мере, если IDataProvider может предоставить данные в двухмерном виде. Из-за наших уровней абстракции у нас нет setInput() в NatTable. С 1.4 мы открыли API, чтобы иметь возможность установить IDataProvider к DataLayer во время выполнения, что-то похожее.
  2. Вы должны реализовать ExpansionModel это помнит состояние расширения. В NatTable у нас то же самое в GroupByExpansionModel по той же причине.
  3. Я еще не делал этого в NatTable, но часто видел это. Так что да, это возможно. IIRC вам нужно реализовать кастом ITreeRowModel который выполняет отложенную загрузку при расширении, если это необходимо. Я бы предложил продлить GlazedListTreeRowModel и проверьте различные методы расширения, которые вам нужно переопределить.

Во-первых, вы можете посмотреть примеры NatTable и посмотреть, как реализовано дерево.

  1. Да, список источников данных - это место для размещения и управления вашими объектами данных.
  2. Для управления расширенным состоянием вы можете использовать ca.odell.glazedlists.TreeList.ExpansionModel которая является частью TreeList вы используете в качестве ввода.
  3. Насколько я знаю, одним из главных преимуществ NatTable является возможность загружать данные по требованию, только когда они должны стать видимыми. Это поведение по умолчанию.
Другие вопросы по тегам