如何对glazed TreeList进行排序?

时间:2011-08-30 17:43:20

标签: java swt treelist glazedlists nattable

我有一个非常奇怪的问题 - 如何对glazed TreeList进行排序?我在SWT NatTable中使用它,当我的数据提供程序设置为其中包含TreeList的GlazedListsDataProvider时,排序以一种非常奇怪的方式工作。如果我使用带有SortedList的GlazedListsDataProvider,它可以正常工作。

例如,我的树看起来像那样:

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

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

感谢您的耐心等待,我很乐意获得任何提示。 最好的问候,Alex G。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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