簡體   English   中英

如何對玻璃樹列表進行排序?

[英]How to sort glazed TreeList?

我有一個很奇怪的問題-如何對玻璃樹列表進行排序? 我在SWT NatTable中使用它,並且當我的數據提供程序設置為GlazedListsDataProvider且其中包含TreeList時,排序的方式非常奇怪。 如果我將GlazedListsDataProvider與SortedList結合使用,則效果很好。

例如,我的樹看起來像這樣:

Root
  Node1
   Child1
   Child2
  Node2
   Child3

我只需要排序子節點INSIDE 1和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 就像,“如果他們有不同的父母,我不在乎哪一個先行”。 但是我想您要,“如果他們有不同的父母,那么第一個應該是有第一個父母的那個”。 如果只想在父母內部進行自定義排序,則應保持在父母外部進行排序。 不確定確切的代碼,但是您可以執行以下操作:

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
   }

因此,這是我針對此問題的解決方案: DZone文章 再一次,它只是可能的解決方案之一,雖然不是完美的,但是它正在起作用:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM