【问题标题】:How to sort glazed TreeList?如何对上釉的 TreeList 进行排序?
【发布时间】:2011-11-07 00:41:45
【问题描述】:

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

例如,我的树是这样的:

Root
  Node1
   Child1
   Child2
  Node2
   Child3

我只需要对节点 1 和节点 2 内的子节点进行排序,将它们分别排序(这样只有子节点 1 和子节点 2 会改变它们的位置)。但是,排序后如下所示:

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

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

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

【问题讨论】:

    标签: java swt treelist glazedlists nattable


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答。我认为,在这种情况下返回 0 是完全可以的,因为在这种情况下,元素应该保留在它们最初所在的那些地方。我找到了一个解决方案,我想我会把它贴在某个地方。它远非完美,但至少它是有效的))
    • @AlexanderGavrilov - 不,这是我的意思,返回 0 是不行的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 2019-10-19
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多