1

我有一个很奇怪的问题——如何对有釉的 TreeList 进行排序?我在 SWT NatTable 中使用它,当我的数据提供者设置为 GlazedListsDataProvider 并在其中包含 TreeList 时,排序以一种非常奇怪的方式工作。如果我将 GlazedListsDataProvider 与 SortedList 一起使用,它工作正常。

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

Root
  Node1
   Child1
   Child2
  Node2
   Child3

我只需要对节点 1 和节点 2 内的子项进行排序,将它们分别排序(这样只有 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 不能以正确的方式工作,但是,我看不到其他解决方案。或者可能是其他地方的问题,而不是我的比较器。

感谢您的耐心等待,我很乐意得到任何提示。最好的问候,亚历克斯·G。

4

2 回答 2

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
   }
于 2011-09-21T12:41:42.467 回答
0

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

于 2011-10-02T18:59:11.077 回答