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 oppretter en SWT-liste som viser listen over seksjoner. Listen fylles ut ved hjelp av JFace-visningsprogrammet. (Vi kommer tilbake til JFace-visningsprogrammer i Visningsprogrammer.) Merk at dialogboksen ikke må opprette knappene siden dette blir gjort av superklassen.
protected Control createDialogArea(Composite parent) { Composite composite = (Composite)super.createDialogArea(parent); List list = new List(composite, SWT.BORDER); ... ListViewer viewer = new ListViewer(list); ... return composite; }
protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(MessageUtil.getString("Readme Sections")); ... }
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.
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; } ...