如何在标准 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()));
...

除了支持 Java 模型之外,StandardJavaElementContentProvider 类还支持下列输入元素类型:IJavaProjectIPackageFragmentRootIPackageFragmentIFolder

添加问题和覆盖修饰符

当假定查看器包括问题注释时,将 DecoratingLabelProvider 与 ProblemsLabelDecorator 一起使用。 以下是概括问题标号修饰符的使用的代码片段:
	...
DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
viewer.setLabelProvider(decorator);
...


可以相同方式使用 OverrideIndicatorLabelDecorator 来修饰正常的标号提供程序,以显示方法的实现和授权指示符。

更新模型更改的表示法

OverrideIndicatorLabelDecoratorProblemsLabelDecorator 都不侦听模型更改。因此,如果 Java 或资源标记模型进行了更改,则查看器不会更新它的表示法。为这些类将更新推送到客户机上的原因是,尚不存在完成所有与性能有关的问题的一般实现。处理每个标号修饰符或提供程序中的 Java 模型增量检查和查看器刷新将导致多个增量检查和不必要的查看器更新。

因此,客户机需要执行哪些操作以便更新它们的查看器?
由于为标号修饰符列举的相同原因,StandardJavaElementContentProvider 不侦听模型更改。如果查看器需要根据 Java 模型更改来更新其表示法,则客户机应该将相应的侦听器添加至 JavaCore。如果由增量描述的更改使查看器中提供的元素的结构无效,则客户机应该使用标准 JFace API 来更新查看器(参见 StructuredViewer 的刷新方法以及 TableViewer 和 AbstractTreeViewer 的添加和除去方法)。

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