如何分类釉面树列表



我有一个很奇怪的问题-如何排序釉面树列表?我在SWT natable中使用它,当我的数据提供程序设置为GlazedListsDataProvider,其中包含TreeList时,排序以一种非常奇怪的方式工作。它工作得很好,如果我使用GlazedListsDataProvider与SortedList。

例如,我的树是这样的:

Root
  Node1
   Child1
   Child2
  Node2
   Child3

我需要对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中构建比较器后,我将其设置为TreeList使用的TreeFormat。

我假设,返回0不能以正确的方式工作,但是,我看不到其他解决方案。也可能是其他地方的问题,而不是我的比较器。

谢谢你的耐心,我很高兴得到任何提示。敬祝Alex G.

当节点有不同的父节点时,当前代码返回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
   }

所以,这是我对这个问题的解决方案:DZone文章。再说一次,这只是一种可能的解决方案,它并不完美,但它正在工作:)

相关内容

  • 没有找到相关文章

最新更新