Mer om arbeidsbenken

Arbeidsbenken inneholder et omfattende sett med klasser og grensesnitt for bygging av komplekse brukergrensesnitt. Du trenger heldigvis ikke å forstå alt for å kunne foreta enkle bygginger. Vi skal begynne med å se på noen begreper som brukes i arbeidsbenkens brukergrensesnitt og den tilhørende strukturen.

Arbeidsbenk

Vi har brukt betegnelsen arbeidsbenk løst når vi henviser til "det vinduet som åpnes når du starter plattformen." La oss se nærmere på dette gjennom å studere noen av de visuelle komponentene som inngår i arbeidsbenken.

Arbeidsbenk med tre visninger og ett redigeringsprogram på en side

Når vi bruker betegnelsen arbeidsbenk i det følgende, refererer vi til arbeidsbenkvinduet (IWorkbenchWindow). Arbeidsbenkvinduet er det øverste vinduet i en arbeidsbenk. Det er en ramme som inneholder menylinjen, verktøylinjen, statuslinjen, snarveifeltet og sidene. Du trenger vanligvis ikke å programmere arbeidsbenkvinduet. Du trenger bare å vite at det er der.

Merk: Du kan åpne flere arbeidsbenkvinduer, men siden hvert arbeidsbenkvindu består av egne redigeringsprogrammer og visninger, konsentrerer vi oss bare om ett eneste arbeidsbenkvindu.

Fra brukerens perspektiv inneholder arbeidsbenken visninger og redigeringsprogrammer. Det finnes en del andre klasser som brukes til å implementere arbeidsbenkvinduet. 

Side

I arbeidsbenkvinduet finner du en side (IWorkbenchPage) som inneholder deler. Sider er en implementeringsmekanisme for gruppering av deler. Du trenger vanligvis ikke å programmere siden, men du vil se den i forbindelse med programmering og feilsøking.

Perspektiver

Perspektiver oppgir enda et lag av organisasjon på en arbeidsbenkside. Et perspektiv definerer en aktuell samling av visninger, layout og aktuelle handlinger for en gitt brukeroppgave. Brukere kan veksle mellom perspektiver når de beveger seg på tvers av oppgaver.  Når det gjelder implementering er det brukerens aktive perspektiv som styrer hvilke visninger som vises på arbeidsbenksiden, og hvilken plassering og størrelse de har. Redigeringsprogrammer påvirkes ikke av endringer i et perspektiv.

Visninger og redigeringsprogrammer

I visninger og redigeringsprogrammer beveger vi oss utover implementeringsdetaljer til vanlig plugin-programmering. Når du legger til en visuell komponent i arbeidsbenken, må du angi om du vil implementere en visning eller et redigeringsprogram. Hvordan bestemmer du deg for dette?

Du bygger uansett visningen eller redigeringsprogrammet i henhold til en vanlig livssyklus.

I hele denne livssyklusen startes hendelser fra arbeidsbenksiden og melder fra til interesserte parter om åpning, aktivering, deaktivering og lukking av visninger og redigeringsprogrammer.

Virker det enkelt? Det kan være enkelt. Det er det som er så flott med arbeidsbenkens visninger og redigeringsprogrammer. De inneholder helt enkelt widgeter, og kan være akkurat så enkle eller komplekse som du vil ha dem. Vi har allerede sett på en av de enkleste visningene da vi bygde en visning for Hello World. La oss se på den på nytt nå som vi har forklart mer om hva som skjer.

   package org.eclipse.examples.helloworld;

   import org.eclipse.swt.widgets.Composite;
   import org.eclipse.swt.widgets.Label;
   import org.eclipse.swt.SWT;
   import org.eclipse.ui.part.ViewPart;

   public class HelloWorldView extends ViewPart {
      Label label;
      public HelloWorldView() {
      }
public void createPartControl(Composite parent) {
         label = new Label(parent, SWT.WRAP);
         label.setText("Hello World");
      }
      public void setFocus() {
         // set focus to my widget.  For a label, this doesn't
         // make much sense, but for more complex sets of widgets
         // you would decide which one gets the focus.
      }
   }

Merk at vi ikke trengte å implementere en dispose()-metode siden vi bare opprettet en etikett i metoden createPartControl(parent). Hvis vi hadde opprettet brukergrensesnittressurser, for eksempel bilder eller fonter, kunne vi ha slettet dem her. Siden vi utvidet ViewPart-klassen, arver vi "do nothing" -implementeringen av dispose().