JDT-UI API 提供了几个类来在标准 JFace 查看器中显示 Java 模型或者它的部件。此功能主要由下列各项提供:
...除了支持 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
类还支持下列输入元素类型:IJavaProject
、IPackageFragmentRoot
、IPackageFragment
和 IFolder
。...可以相同方式使用 OverrideIndicatorLabelDecorator 来修饰正常的标号提供程序,以显示方法的实现和授权指示符。
DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
viewer.setLabelProvider(decorator);
...
OverrideIndicatorLabelDecorator
和 ProblemsLabelDecorator
都不侦听模型更改。因此,如果 Java 或资源标记模型进行了更改,则查看器不会更新它的表示法。为这些类将更新推送到客户机上的原因是,尚不存在完成所有与性能有关的问题的一般实现。处理每个标号修饰符或提供程序中的 Java 模型增量检查和查看器刷新将导致多个增量检查和不必要的查看器更新。OverrideIndicatorLabelDecorator
:客户机必须侦听 Java 模型更改(参见 JavaCore.addElementChangedListener
),并决定由增量描述的更改是否使查看器中存在的元素的授权指示符无效。如果是这种情况,则检查增量的类应该触发使用标准 JFace 查看器 API 来重新绘制相应的 Java 元素(参见 StructuredViewer 的更新方法)。ProblemsLabelDecorator
:客户机应该侦听由修饰符通过 ProblemsLabelChangedEvent 通知的更改(另见 ProblemsLabelDecorator.addListener)。因为标记模型是基于资源的,所以侦听器需要将资源通知映射为其底层数据模型。有关说明如何为提供 Java 元素的查看器完成此任务的示例,参见内部类 ProblemTreeViewer.handleLabelProviderChanged
。