Presentere Java-elementer i et JFace-visningsprogram

APIet for JDT-brukergrensesnitt har klasser som gjør det mulig for deg å presentere Java-modellen eller deler av den i et standard JFace-visningsprogram. Denne funksjonaliteten besørges først og fremst av

Innholds- og etikettleverandører for JFace-visningsprogrammer er beskrevet detaljert i JFace-visningsprogrammer.

Hvis du forstår den grunnleggende plattformmekanismen, er det ganske enkelt å sette sammen Java-innholdet og etikettleverandører:
    ...
    TreeViewer viewer= new TreeViewer(parent);
    // Besørg medlemmer av en kompileringsenhet eller klassefil, men ingen arbeidskopielementer
    ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false);
    viewer.setContentProvider(contentProvider);
    // Det er flere flagg definert i klassen JavaElementLabelProvider
    ILabelProvider labelProvider= new JavaElementLabelProvider(
        JavaElementLabelProvider.SHOW_DEFAULT |
        JavaElementLabelProvider.SHOW_QUALIFIED |
        JavaElementLabelProvider.SHOW_ROOT);
    viewer.setLabelProvider(labelProvider);
    // Presenter Java-prosjekter på første nivå ved å bruke Java-modellen som visningsprogrammer.
    viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
    ...

Eksempelet over bruker aJava-modellen (IJavaModel) som inndataelement for visningsprogrammet.  StandardJavaElementContentProvider støtter også IJavaProject, IPackageFragmentRoot, IPackageFragment og IFolder som inndataelementer:

Overlegge bilder med Java-informasjon

JavaElementImageDescriptor kan brukes til å opprette et bilde på grunnlag av en vilkårlig basebildedeskriptor og et sett med flagg for å spesifisere hvilke Java-spesifikke utsmykninger (f.eks. statisk, endelig, synkronisert...) som skal legges på bildet.

Legge til problem og overstyre dekoratører

Når et visningsprogram er ment å inkludere problemannotasjoner, brukes DecoratingLabelProvider fra JFace sammen med ProblemsLabelDecorator. Snutten under illustrerer bruken av en problemetikettdekoratør.
    ...
    DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
    viewer.setLabelProvider(decorator);
    ...

På samme måte som OverrideIndicatorLabelDecorator kan brukes til å dekorere en normal etikettleverandør for å vise implementasjon og overstyre indikatorer for metoder.

Oppdatere presentasjon på modellendringer

Verken OverrideIndicatorLabelDecorator eller ProblemsLabelDecorator lytter på modellendringer. dermed oppdaterer ikke visningsprogrammet sin presentasjon hvis Javas eller ressursens merkemodell endres. Årsaken til at oppdateringen trykkes på klienten for disse klassene, er at det ennå ikke er en generisk implementasjon som oppfyller alle ytelseskrav. Håndtering av Java-modellens deltainspeksjon og visningsprogram som oppdateres i hver etikettdekoratør eller leverandør, ville føre til flere delta inspeksjoner og unødvendige oppdateringer av visningsprogram.

Så hva må klienten gjøre for å oppdatere sine visningsprogrammer?

Av samme grunner som er nevnt for etikettdekoratører, lytter ikke StandardJavaElementContentProvider etter modellendringer. Hvis visningsprogrammet må oppdatere sin presentasjon i samsvar med Java-modellendringer, må klienten legge til en tilsvarende lytter i JavaCore. Hvis endringen beskrevet av delta ugyldiggjør strukturen til elementene som presenteres i visningsprogrammet, bør klienten oppdatere visningsprogrammet med standard JFace-API (se forny metoder på StructuredViewer, og legg til og fjern metoder i TableViewer og AbstractTreeViewer).

Sortere visningsprogrammet

JavaElementSorter kan plugges til et JFace-visningsprogram for å sortere Java-elementer i samsvar med sorteringsstilen for Java-grensesnittet.