JDT 用户界面 API 提供了类来允许在标准 JFace 查看器中显示 Java 模型或它的部件。此功能主要由下列各项提供:
JFace 查看器详细描述了 JFace 查看器的内容和标签提供程序。
如果您了解基本的平台机制,则将 Java 内容和标签提供程序放到一起十分简单:... 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 模型(IJavaModel)作为查看器的输入元素。StandardJavaElementContentProvider 还支持 IJavaProject、IPackageFragmentRoot、IPackageFragment 和 IFolder 作为输入元素:
JavaElementImageDescriptor 可以用来根据任意基本图像描述符和一组标志创建图像,这些标志指定要将哪些特定于 Java 的修饰(例如,静态、终态和同步等)叠加到图像上。
... DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator()); viewer.setLabelProvider(decorator); ...
可以相同方式使用 OverrideIndicatorLabelDecorator 来修饰正常的标签提供程序,以显示方法的实现和授权指示符。
OverrideIndicatorLabelDecorator 和 ProblemsLabelDecorator 都不侦听模型更改。因此,如果 Java 或资源标记模型进行了更改,则查看器不会更新它的表示法。为这些类将更新推送到客户机上的原因是,尚不存在完成所有与性能有关的问题的通用实现。处理每个标签修饰符或提供程序中的 Java 模型增量检查和查看器刷新将导致多个增量检查和不必要的查看器更新。
因此,客户机需要执行哪些操作以便更新它们的查看器?
ProblemTreeViewer.handleLabelProviderChanged
。由于对标签修饰符列举的那些原因,StandardJavaElementContentProvider 不侦听模型更改。如果查看器需要根据 Java 模型更改来更新其表示法,则客户机应该将相应的侦听器添加至 JavaCore。如果由增量描述的更改使查看器中提供的元素的结构无效,则客户机应该使用标准 JFace API 来更新查看器(请参阅 StructuredViewer 的刷新方法以及 TableViewer 和 AbstractTreeViewer 的添加和除去方法)。
JavaElementSorter 可以插入到 JFace 查看器中,以便根据 Java 用户界面排序样式来对 Java 元素进行排序。