Applikasjonsdialogbokser

Hvis en standard dialogboks er altfor enkel for plugin-modulen, kan du bygge din egen dialogboks ved hjelp av klassen Dialog. Vi har tidligere sett hvordan et readme-verktøy oppgav en handling for åpning av readme-nettleseren i et handlingssett. Du finner dette handlingssettet på verktøylinjen i arbeidsbenken og på menyen under Vindu->Readme File Editor.  

Nå skal vi se nærmere på implementeringen av denne handlingen i readme-verktøyets WindowActionDelegate.

public void run(IAction action) {
      SectionsDialog dialog = new SectionsDialog(window.getShell(),
         ReadmeModelFactory.getInstance().getSections(selection));
      dialog.open();
   }

Vinduets handlingsdelegat for handlingssettet bruker gjeldende valg i ressursnavigatorvisningen ( .readme-filen) til å hente en liste med seksjoner i readme-filen. Listen og skallet for arbeidsbenkvinduet overføres til SectionsDialog

Når brukeren velger handlingen, åpnes SectionsDialog.

SectionsDialog implementeres i plugin-modulen for readme-verktøyet gjennom subklasser for klassen Dialog i pakken org.eclipse.jface.dialogs.

Klassen Dialog gir grunnleggende støtte for bygging av et dialogboksvindusskall ved å opprette vanlige dialogboksknapper og starte dialogboksen. Subklassene håndterer innholdet i selve dialogboksen:

SectionsDialog implementerer ikke en okButtonPressed-metode. Den arver implementeringen "Ikke gjør noe" fra dialogboksen. Dette er imidlertid ikke vanlig. Dialogboksen foretar vanligvis en handling som svar på at det klikkes på en av knappene.

Dialogbokser kan være enkle eller kompliserte, alt etter hvilke behov brukeren har. Når du implementerer en dialogboks, brukes dialogkoden hovedsakelig til å opprette SWT-kontrollene som svarer til innholdsområdet og håndterer hendelser som skal utføres når dialogboksen vises. Når brukeren klikker på en av knappene, kan dialogboksen sende en forespørsel om statusen i de ulike kontrollene (eller visningsprogrammene) for dialogboksen, for å fastslå riktig handling.

PopupDialog

I noen tilfeller kan det være ønskelig å få vist informasjon om noe i en dialogboks, men på en måte som er "enklere" enn å åpne en vanlig dialogboks. For eksempel kan en dialogboks være ment å gi midlertidig informasjon som lett kan fjernes, uten av fokus fjernes fra brukerens arbeid. I så fall kan du bruke klassen PopupDialog til å implementere dialogboksen. Utseendet og virkemåte til PopupDialog er forskjellig fra en vanlig dialogboks på flere måter. Den har ingen knapper nederst, den har ikke noen standard vindustittellinje, og kantlinjer, mellomrom og fonter er mindre og mer kompakte.

Selv om en PopupDialog har et helt annet utseende enn n vanlig dialogboks, er koden i plugin-modulens subklasse nesten den samme. Du kan likevel implementere metoden createDialogArea for å opprette SWT-kontroller for dialogboksen. Hovedforskjellen i applikasjonskoden er at konstruktøren som opppretter dialogboksen, har mange flere parametere enn den vanlige Dialog-klassen. For eksempel kan SectionsDialog forandres til en PopupDialog bare ved å endre superklassen til dialogboksen og konfigurere dialogboksen i konstruktøren:

   public class SectionsDialog extends PopupDialog {
      protected IAdaptable input;

      /**
      * Oppretter en ny SectionsDialog.
      */
      public SectionsDialog(Shell parentShell, IAdaptable input) {
        super(parentShell, SWT.DEFAULT, false, // Ikke fjern fokus ved åpning
        	false, // Ikke fortsett grenser
        	false, // Ikke vis meny for endring av størrelse
        	false, // Ikke vis menypunkt for fortsatte grenser
        	null, //  Ingen tittel
        	null); // Ingen infotekst
        this.input = input;
      }
      ...