Die JDT-Benutzerschnittstellen-API stellt Klassen zur Verfügung, mit deren Hilfe Sie das Java-Modell ganz oder teilweise in einer JFace-Standardanzeigefunktion anzeigen können. Diese Funktionalität besteht primär aus:
Inhalt- und Label-Provider für JFace-Anzeigefunktionen sind unter JFace-Anzeigefunktionen ausführlich beschrieben.
Wenn Sie den Basismechanismus der Plattform verstanden haben, ist es ganz einfach, die Inhalts- und Label-Provider für Java miteinander zu kombinieren:... 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())); ...
Das vorstehende Beispiel verwendet ein Java-Modell (IJavaModel) als Eingabeelement für die Anzeigefunktion. StandardJavaElementContentProvider unterstützt auch IJavaProject, IPackageFragmentRoot, IPackageFragment und IFolder als Eingabeelemente.
Mit JavaElementImageDescriptor kann ein Image basierend auf einem willkürlichen Basisimagedeskriptor erstellt werden. Außerdem kann das Image mit einer Reihe von Markierungen überlagert werden, die Java-spezifische Details (z. B. statisch, final, synchronisiert usw.) angeben.
... 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 Anzeiger für Implementierung und Überschreibung für die Methoden angezeigt werden.
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?
ProblemTreeViewer.handleLabelProviderChanged.
Der StandardJavaElementContentProvider reagiert ebenfalls nicht auf Änderungen des Modells. Die Gründe für dieses Verhalten sind mit denjenigen für Bezeichnungsdekoratoren identisch. 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).
JavaElementSorter kann in eine JFace-Anzeigefunktion integriert werden, um die Java-Elemente entsprechend der Sortierfolge der Java-Benutzerschnittstelle zu sortieren.