標準の JFace ビューアーで Java エレメントを表示する方法

JDT-UI API は、標準の JFace ビューアーで Java モデルまたはその一部を表示するためのいくつかのクラスを提供します。 この機能は、主に以下によって提供されます。

パーツの組み立てはとても簡単です。
	...
IJavaProject jProject= ...;

TreeViewer viewer= new TreeViewer(parent);
// Provide members of a compilation unit or class file, but no working copy elements
ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false);
viewer.setContentProvider(contentProvider);
// There are more flags defined in class JavaElementLabelProvider
ILabelProvider labelProvider= new JavaElementLabelProvider(
JavaElementLabelProvider.SHOW_DEFAULT |
JavaElementLabelProvider.SHOW_QUALIFIED |
JavaElementLabelProvider.SHOW_ROOT);
viewer.setLabelProvider(labelProvider);

// Using the Java model as the viewers input present Java projects on the first level.
viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
...

StandardJavaElementContentProvider クラスは Java モデルに加え、IJavaProjectIPackageFragmentRootIPackageFragment、および IFolder の入力エレメント型をサポートします。

問題およびオーバーライド・デコレーターの追加 

ビューアーが問題注釈を組み込むとき、DecoratingLabelProvider と ProblemsLabelDecorator が使用されます。 以下は、問題ラベル・デコレーターの使用を説明するコードの断片です。 
	...
DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
viewer.setLabelProvider(decorator);
...


同様に、 OverrideIndicatorLabelDecorator を使用して、 メソッドのインプリメントの表示およびメソッドの標識のオーバーライドを行う標準のラベル・プロバイダーをデコレートできます。

モデル変更時の表示の更新

OverrideIndicatorLabelDecoratorProblemsLabelDecorator は、どちらもモデル変更を listen しません。 このため、Java またはリソース・マーカー・モデルが変更された場合、ビューアーは表示を更新しません。 これらのクラスで更新を行う責任をユーザーに課す理由は、 パフォーマンス上の問題をすべて解決する汎用インプリメンテーションがまだないためです。 Java モデル・デルタ・インスペクションと、 それぞれのラベル・デコレーターまたはラベル・プロバイダーでのビューアー最新表示を扱うことは、 複数のデルタ・インスペクションと不要なビューアーの更新をもたらすことにつながります。

ビューアーを更新するために、クライアントが行う必要があることは?
ラベル・デコレーターについて挙げたものと同じ理由で、StandardJavaElementContentProvider はモデル変更を listen しません。 Java モデル変更に応じて、ビューアーの表示を更新する必要がある場合、クライアントは対応するリスナーを JavaCore に追加する必要があります。 デルタによって記述される変更がビューアーに表示されるエレメントの構造を無効にする場合、クライアントは標準の JFace API を使用してビューアーを更新する必要があります (StructuredViewer の refresh メソッド、および TableViewer と AbstractTreeViewer の add および remove メソッドを参照)。

Copyright IBM Corporation and others 2000, 2002. All Rights Reserved.