De gebruikersinterface-API van JDT biedt klassen waarmee u het Java-model of delen ervan in een standaard JFace-viewer kunt weergeven. Deze functionaliteit is vooral beschikbaar bij:
In JFace viewers vindt u meer informatie over het leveren van content en labels voor JFace-viewers.
Als u de basismechanismen van het platform begrijpt, is het eenvoudig om de elementen die content en labels leveren, samen te voegen:... TreeViewer viewer= new TreeViewer(parent); // Leden van een compilatie-eenheid of klassenbestand aanleveren, maar geen werkkopie-elementen ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false); viewer.setContentProvider(contentProvider); // Er zijn meer vlaggen gedefinieerd in de klasse JavaElementLabelProvider ILabelProvider labelProvider= new JavaElementLabelProvider( JavaElementLabelProvider.SHOW_DEFAULT | JavaElementLabelProvider.SHOW_QUALIFIED | JavaElementLabelProvider.SHOW_ROOT); viewer.setLabelProvider(labelProvider); // Java-model gebruiken als viewers invoer afbeelden van Java-projecten op het eerste niveau. viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot())); ...
Het bovenstaande voorbeeld gebruikt een aJava-model (IJavaModel) als invoerelement voor de viewer. De StandardJavaElementContentProvider ondersteunt ook IJavaProject, IPackageFragmentRoot, IPackageFragment en IFolder als invoerelementen:
JavaElementImageDescriptor kan worden gebruikt om een afbeelding te maken op basis van een arbitraire basisbeschrijving en een groep vlaggen die aangeven welke Javaspecifieke code (b.v. static, final, synchronized, ....) aan de afbeelding moet worden toegevoegd.
... DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator()); viewer.setLabelProvider(decorator); ...
Op dezelfde manier kunt u OverrideIndicatorLabelDecorator gebruiken om een normale labelprovider te decoreren en de implementatie- en negeerindicators voor methoden weergeven.
OverrideIndicatorLabelDecorator en ProblemsLabelDecorator reageren niet op modelwijzigingen. De viewer werkt de presentatie dus niet bij als het Java- of resourcemarkeringsmodel wordt gewijzigd. De reden waarom de bijwerking van de klassen door de client wordt uitgevoerd, is dat er geen generieke implementatie is die aan alle prestatievereisten voldoet. Het afhandelen van delta-inspecties van Java-modellen en het vernieuwen van viewers in alle labeldecorators of -providers zou leiden tot meerdere delta-inspecties en het onnodig bijwerken van viewers.
Wat heeft een client nodig om de viewers te vernieuwen?
ProblemTreeViewer.handleLabelProviderChanged.
Om dezelfde redenen als bij labeldecorators reageert StandardJavaElementContentProvider niet op modelwijzigingen. Als de viewer de presentatie moet bijwerken aan de hand van de Java-modelwijzigingen, moet de client een corresponderende listener toevoegen aan JavaCore. Als de door de delta beschreven wijziging de structuur van de elementen in de viewer ongeldig maakt, moet de client de viewer bijwerken met de standaard-JFace-API (zie de vernieuwingsmethoden voor StructuredViewer en de toevoeg- en verwijdermethoden voor TableViewer en AbstractTreeViewer).
JavaElementSorter kan in een JFace-viewer worden opgenomen om Java-elementen te sorteren volgens de sorteerstijl van de Java-gebruikersinterface.