Как отсортировать глазированный TreeList? - PullRequest
1 голос
/ 30 августа 2011

У меня довольно странный вопрос - как отсортировать глазированный TreeList?Я использую его в SWT NatTable, и когда мой поставщик данных установлен на GlazedListsDataProvider с TreeList внутри, сортировка работает очень странным образом.Это работает нормально, если я использую GlazedListsDataProvider с SortedList.

Например, мое дерево выглядит так:

Root
  Node1
   Child1
   Child2
  Node2
   Child3

Мне нужно отсортировать только дочерние элементы INSIDE Node1 и Node2, отдельно один издругой (так что только child1 и child2 будут менять свое место).Однако после сортировки это выглядит следующим образом:

Root
  Node1
  Node2
   Child1
   Child2
   Child3

Перевернутая сортировка:

Root
  Node1
  Node2
   Child2
   Child1
   Child3

Таким образом, в принципе, это работает (сортирует дочерние элементы правильно), но более тогоон сортирует элементы, которые он не должен сортировать.Что может быть причиной такого поведения?Мой алгоритм сортировки прост:

compare (element1, element2) {
   if (both elements are under same parent and have same type)
     compare
   otherwise
     return 0
   }

Я делаю сортировку, как предложено в следующем примере http://kari.dy.fi/src/sample/foldertree.zip - это означает, что после построения компаратора в SortState я устанавливаю его в TreeFormat, используемыйTreeList.

Я предполагаю, что возвращение 0 не работает должным образом, однако я не вижу другого решения.Или, может быть, это проблема где-то еще, а не в моем компараторе.

Спасибо за ваше терпение, я буду рад получить любые подсказки.С наилучшими пожеланиями, Алекс Г.

Ответы [ 2 ]

0 голосов
/ 02 октября 2011

Итак, вот мое решение этой проблемы: DZone Article . Еще раз, это только одно из возможных решений, и оно не идеально, но оно работает:)

0 голосов
/ 21 сентября 2011

Ваш текущий код возвращает 0, когда узлам есть разные родители.Это как «если у них разные родители, мне все равно, кто из них пойдет первым».Но я думаю, что вы хотите, «если у них разные родители, первым должен быть тот, у кого есть первый родитель».Если вы хотите выполнять пользовательскую сортировку только внутри родителей, вам следует продолжать сортировку вне родителей, как это было раньше.Не уверен насчет точного кода, но вы можете сделать что-то вроде:

compare (element1, element2) {
   if (both elements are under same parent and have same type)
     compare
   otherwise
     return original.compare(element1,element2)//delegate to the original sorting
   }

или

compare (element1, element2) {
   if (both elements are under same parent and have same type)
     compare
   otherwise
     compare(element1.parent,element2.parent) // sort on parent level
   }
...