Presentera Java-element i ett JFace-visningsprogram

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:

Lägga över bilder med Java-information

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.

Lägga till problem- och åsidosättningsdekorationer

När ett visningsprogram ska ta med problemanteckningar, används JFace DecoratingLabelProvider tillsammans med ProblemsLabelDecorator. Stycket nedan visar användningen av en problemetikettdekoration.
    ...
    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.

Uppdatera presentationen på modelländringar

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?

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).

Sortera visningsprogrammet

JavaElementSorter kan kopplas in i ett JFace-visningsprogram och sortera Java-element utifrån Java UI-sorteringsordningen.