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 模型數據的視察以及會在每個標籤 Decorator 或提供者中重新整理的檢視器時,
會導致視察多項數據,以及不必要的檢視器更新。
OverrideIndicatorLabelDecorator
:用戶端必須接聽 Java 模型的變更
(請參閱 JavaCore.addElementChangedListener
),
並決定數據所說明的變更,是否要讓檢視器中所呈現元素的置換指示器變成無效。
若是,則會視察數據的類別應使用標準 JFace 檢視器 API,
以觸發對應 Java 元素的重繪(請參閱 StructuredViewer 中的 update 方法)。
ProblemsLabelDecorator
:用戶端應透過
ProblemsLabelChangedEvent 接聽 Decorator 所通知的變更
(另請參閱
ProblemsLabelDecorator.addListener)。由於標示元模型是以資源為基礎,
接聽器必須將資源通知對映至其基礎的資料模型。
有關如何針對顯示 Java 元素的檢視器執行此項的範例說明,
請參閱內部類別 ProblemTreeViewer.handleLabelProviderChanged。