Java-Elemente in einer Standard-JFace-Anzeigefunktion darstellen

Die JDT-Benutzerschnittstellen-API bietet verschiedene Klassen zur vollständigen oder teilweisen Darstellung des Java-Modells in einer Standard-JFace-Anzeigefunktion. Diese Funktionalität besteht primär aus:

Das Zusammenfügen dieser beiden Komponenten ist recht einfach:
	...
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()));
...

Neben dem Java-Modell unterstützt die Klasse StandardJavaElementContentProvider die folgenden Typen von Eingabeelementen: IJavaProject, IPackageFragmentRoot, IPackageFragment und IFolder.

Fehler- und Überschreibungsdekoratoren hinzufügen

Soll eine Anzeigefunktion Anmerkungen zu Fehlern enthalten, wird ein DecoratingLabelProvider zusammen mit dem ProblemsLabelDecorator verwendet. Nachfolgend ist ein Code-Snippet dargestellt, das die Verwendung eines Dekorators für die Fehlerbezeichnung kurz umschreibt:
	...
DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
viewer.setLabelProvider(decorator);
...


Der OverrideIndicatorLabelDecorator kann auf die gleiche Weise verwendet werden, um einen normalen Bezeichnungsprovider so zu dekorieren, dass die Indikatoren für Implementierung und Überschreibung für die Methoden angezeigt werden.

Darstellung auf Änderungen des Modells hin aktualisieren

Weder der OverrideIndicatorLabelDecorator noch der ProblemsLabelDecorator reagieren auf Änderungen des Modells. Somit aktualisiert die Anzeigefunktion ihre Darstellung nicht, wenn sich das Java- oder das Ressourcenmarkierungsmodell ändern. Für diese Klassen muss der Client die Aktualisierung selbst ausführen, da noch keine generische Implementierung verfügbar ist, die alle Ansprüche der Leistung erfüllt. Die Ausführung der Deltaprüfung für Java-Modelle und die Aktualisierung der Anzeigefunktion für alle Bezeichnungsdekoratoren oder -provider würde zu mehreren Deltaprüfungen und unnötigen Aktualisierungen der Anzeigefunktion führen.

Welche Schritte muss der Client ausführen, um seine Anzeigefunktionen zu aktualisieren?
Der StandardJavaElementContentProvider reagiert ebenfalls nicht auf Änderungen des Modells. Die Gründe sind die gleichen wie die, die für Bezeichnungsdekoratoren aufgelistet wurden. Muss die Anzeigefunktion ihre Darstellung entsprechend den Änderungen des Java-Modells aktualisieren, sollte der Client eine entsprechende Listener-Funktion zu JavaCore hinzufügen. Macht die durch das Delta beschriebene Änderung die Struktur der in der Anzeigefunktion dargestellten Elemente ungültig, sollte der Client die Anzeigefunktion unter Verwendung der Standard-JFace-API aktualisieren (siehe hierzu die Aktualisierungsmethoden für StructuredViewer sowie die Methoden für Hinzufügen und Löschen für TableViewer und AbstractTreeViewer).

Copyright IBM Corporation und Andere 2000, 2002. Alle Rechte vorbehalten.