我有一个非常奇怪的问题 - 如何对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。
答案 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。再次,它只是可能的解决方案之一,它并不完美,但它正在工作:)