JDT UI-APIt tillhandahåller klasser som gör det möjligt för dig att presentera Java-modellen eller delar av den i ett vanligt JFace-visningsprogram. Denna funktionalitet tillhandahålls främst av:
Innehålls- och etikettproviders för JFace-visningsprogram beskrivs utförligt i JFace-visningsprogram.
Om du förstår den grundläggande plattformsmekanismen är det ganska enkelt att sätta ihop Java-innehållet och etikettprovidern:... 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())); ...
I exemplet ovan används en a Java-modell (IJavaModel) som indataelement för visningsprogrammet. StandardJavaElementContentProvider hanterar även IJavaProject, IPackageFragmentRoot, IPackageFragment och IFolder som indataelement:
JavaElementImageDescriptor kan användas till att skapa en bild baserad på en godtycklig basbildsbeskrivning och en uppsättning flaggor som ange vilka Java-specifika attribut (t.ex. statisk, slutlig, synkroniserad, ....) som ska läggas över bilden.
... DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator()); viewer.setLabelProvider(decorator); ...
På samma sätt kan OverrideIndicatorLabelDecorator användas till att dekorera en normal etikettprovider till att visa implementerings- och åsidosättningsindikatorerna för metoderna.
Vare sig OverrideIndicatorLabelDecorator eller ProblemsLabelDecorator lyssnar till modelländringar. Det innebär att visningsprogrammet inte uppdaterar sin presentation om Java- eller resursmarkeringsmodellen ändras. Orsaken till att tvinga på uppdateringen på klienterna för dessa klasser, är att det ännu inte finns någon generisk implementation som uppfyller alla prestandatveksamheter. Hantering av deltainspektion för Java-modell och visarhänvisning i varje etikettdekoratör eller -provider, skulle leda till flera deltainspektioner och onödiga visaruppdateringar.
Så vad behöver klienten för att kunna uppdatera sina visningsprogram?
ProblemTreeViewer.handleLabelProviderChanged.
Av samma orsaker som räknats upp för etikettdekoratörer, lyssnar inteStandardJavaElementContentProviderpå modelländringar. Om visningsprogrammet behöver uppdatera sin presentation utifrån Java-modelländringar, ska klienten lägga till en motsvarande lyssnare i JavaCore. Om den ändring som beskrivs av deltat ogiltigförklarar strukturen för elementen som presenteras i visningsprogrammet, ska klienten uppdatera visningsprogrammet med JFaces standard-API (se uppdateringsmetoder för StructuredViewer och metoderna add och remove för TableViewer och AbstractTreeViewer).
JavaElementSorter kan kopplas in i ett JFace-visningsprogram och sortera Java-element utifrån Java UI-sorteringsordningen.