Præsentér Java-elementer i en JFace-fremviser

JDT-brugergrænsefladens API indeholder klasser, som du kan bruge til at præsentere Java-modellen eller dele deraf i en JFace-standardfremviser. Denne funktionalitet bygger primært på:

Udbydere af indhold og etiketter til JFace-fremvisere beskrives nærmere under JFace-fremvisere.

Hvis du forstår basisplatformens mekanismer, er det ganske ligetil at sætte Java-indhold og -etiketter sammen:
    ...
    TreeViewer viewer= new TreeViewer(parent);
    // Angiv medlemmer i en kompileringsenhed eller klassefil, men ikke nogen arbejdskopielementer
    ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false);
    viewer.setContentProvider(contentProvider);
    // Der er flere flag defineret i klassen JavaElementLabelProvider
    ILabelProvider labelProvider= new JavaElementLabelProvider(
        JavaElementLabelProvider.SHOW_DEFAULT |
        JavaElementLabelProvider.SHOW_QUALIFIED |
        JavaElementLabelProvider.SHOW_ROOT);
    viewer.setLabelProvider(labelProvider);
    // Brug af Java-modellen som fremvisningsinput præsenterer Java-projekter på øverste niveau.
    viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
    ...

Ovenstående eksempel bruger en Java-model (IJavaModel) som inputelement til fremvisningen. StandardJavaElementContentProvider understøtter også IJavaProject, IPackageFragmentRoot, IPackageFragment og IFolder som inputelementer:

Læg Java-oplysninger hen over billeder

JavaElementImageDescriptor kan bruges til at oprette et billede ud fra en vilkårlig beskrivelse af en basisbillededeskriptor og et sæt markeringer, som angiver, hvilken Java-specifik udsmykning (statisk, afsluttede, synkroniseret osv.) der skal anbringes oven på billedet.

Tilføj problem, og overskriv dekoratører

Når en fremviser formodes at inkludere bemærkninger om problemer, bruges JFace DecoratingLabelProvider sammen med ProblemsLabelDecorator. Nedenstående kodestykke illustrerer brugen af en dekoratør af problemetiketter.
    ...
    DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
    viewer.setLabelProvider(decorator);
    ...

På samme måde kan OverrideIndicatorLabelDecorator bruges til at dekorere en almindelig etiketudbyder, så implementerings- og tilsidesættelsessindikatorerne for metoder vises.

Opdatér præsentationen af modelændringer

Hverken OverrideIndicatorLabelDecorator eller ProblemsLabelDecorator lytter til modelændringer. Derfor opdaterer fremviseren ikke sin præsentation, hvis Java- eller ressourcemarkeringsmodellen ændres. Grunden til at skubbe opdateringen over på klienten i forbindelse med disse klasser er, at der endnu ikke er en generisk implementering, der tilfredsstiller alle krav til ydeevnen. Håndtering af Java-modellens deltaundersøgelse og opfriskning af fremviser hos hver etiketdekoratør eller -udbyder vil føre til flere deltaundersøgelser og unødvendige opdateringer af fremvisere.

Så hvad skal klienten gøre for at opdatere sine fremvisere?

Af samme årsager, som blev opregnet for etiketdekoratører, lytter StandardJavaElementContentProvider ikke til modelændringer. Hvis fremviseren har behov for at opdatere sin præsentation i overensstemmelse med ændringerne af Java-modellen, skal klienten tilføje en tilsvarende lytter til JavaCore. Hvis den ændring, der beskrives af deltaen, ugyldiggør strukturen for de elementer, der præsenteres i fremviseren, så skal klienten opdatere fremviseren ved at bruge standard-API'et for JFace (se opdateringsmetoder for StructuredViewer samt metoder til tilføjelse og fjernelse for TableViewer og AbstractTreeViewer).

Sortér fremviseren

JavaElementSorter kan sendes til en JFace.fremviser for at sortere Java-elementer i overensstemmelse med Java-brugergrænsefladens sorteringstype.