6

どうやら、ILazyTree(TreePath)ContentProvider並べ替えとフィルタリングの使用が でサポートされていない場合TreeViewersViewerFiltersそのため、 TreeView にorを設定Sorters/Comparatorsしても何の役にも立ちません。おそらくこれは、現時点で見えていない要素も含めて、すべての要素を把握していないことに関係しています。

このステートメントをサポートするために、org.eclipse.jface.viewers.TreeViewerクラスからの javadoc の抜粋を次に示します。

コンテンツ プロバイダが ILazyTreeContentProviderまたは の ILazyTreePathContentProvider場合、基になるツリーは {@link SWT#VIRTUAL} スタイル ビットを使用して作成する必要があり、ツリー ビューアは並べ替えやフィルタリングをサポートしません。{@link #setUseHashlookup を呼び出してハッシュ ルックアップを有効にする必要があります。 (ブール値)}.

現時点で唯一の解決策は、すでに注文されている各ノードの子を取得することです。動的な並べ替えが必要な場合、つまり、実行時に降順または昇順で並べ替え順序を切り替えることができるようにする必要がある場合は、独自の解決策を考え出す必要があります。たとえば、子の入力および更新時に並べ替えのブール フラグを監視します。

おそらくより良い解決策、おそらくより多くのjface APIを含むことに気づいていますか?

4

1 に答える 1

7

実際、このスレッドVIRTUAL-TreeViewerに記載されているように、 aを使用するIStructuredContentProviderか遅延型を使用するかにかかわらず、並べ替えはできません。

自分で (モデルで) 並べ替えを行う必要があります。
根底にある仮定は、要素がメモリ内にさえない可能性があるということです。

e4 では状況が変わる可能性があります (2009 年 6 月のこのメッセージから):

仮想JFaceテーブルとツリーの実装は、非仮想のものほど良くありません-私はそれを避け、私のプロジェクトでは使用しません。

[...] UI 設計の観点からすると、ユーザーに何千もの要素を表示することは無意味であり、JFace で大きなテーブルを表示するモデルがメモリに常駐するため、さらに重要であるため、仮想テーブルを持つことは無意味です。すべてのヒープスペースを増やします
(このような問題を修正するために、E4 で再設計されたビューアーのセットを考え出すことを望んでいます)。このプロジェクトバグ 260451
を参照してください。 (より一般的なバグ: 167436および262160 )

たった今:

テーブルが要求した後、ビューアで強い参照を作成しています。

IMHO ユーザーに提供する方がはるかに優れています: - ページング - インテリジェントなフィルタリングの可能性

何百万もの結果を表示する代わりに、たとえばCDO (Connected Data Objects)の場合、新しいクエリ API を使用してサーバー上でフィルタリングが行われます。

于 2009-11-26T12:15:25.923 に答える