我有一个很奇怪的问题--如何对TreeList进行排序?我在SWT NatTable中使用它,当我的数据提供程序设置为GlazedListsDataProvider并在其中包含TreeList时,排序以一种非常奇怪的方式工作。如果我在SortedList中使用GlazedListsDataProvider,它工作得很好。
例如,我的树看起来是这样的:
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。
发布于 2011-10-03 02:59:11
所以,这是我对这个问题的解决方案:DZone Article。再说一次,这只是一种可能的解决方案,它并不完美,但它正在发挥作用:)
发布于 2011-09-21 20:41:42
当to节点具有不同的父节点时,您当前的代码将返回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
}https://stackoverflow.com/questions/7247470
复制相似问题