1

かなり奇妙な質問があります-艶をかけられたTreeListをソートする方法は? 私は SWT NatTable で使用しています。データ プロバイダーが GlazedListsDataProvider に設定され、その中に TreeList があると、並べ替えが非常に奇妙な方法で機能します。SortedList で GlazedListsDataProvider を使用している場合、正常に動作します。

たとえば、私のツリーは次のようになります。

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で構築された後、TreeListで使用されるTreeFormatに設定しています。

0 を返すことは正しく機能しないと思いますが、他の解決策は見当たりません。または、私のコンパレーターではなく、別の場所に問題がある可能性があります。

ご辛抱いただきありがとうございます。ヒントをいただければ幸いです。敬具、アレックス G.

4

2 に答える 2

0

したがって、この問題に対する私の解決策は次のとおりです。 DZone Article . 繰り返しますが、これは可能な解決策の 1 つにすぎず、完璧ではありませんが、機能しています :)

于 2011-10-02T18:59:11.077 に答える
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 に答える