SWT inneholder en rekke gode funksjoner, og med grunnleggende kunnskap om kjernen i systemet, widgeter, layouter og hendelser, har du det som trengs for å implementere nyttige og kraftige applikasjoner.
Når du oppgir brukergrensesnittelementer ved å bruke plattformens arbeidsbenkutvidelser, håndterer arbeidsbenken oppstarten av SWT.
Hvis du skriver en SWT-applikasjon fra grunnen av utenfor arbeidsbenken, trenger du å vite mer om SWTs applikasjonsstruktur.
Strukturen i en vanlig frittstående SWT-applikasjon er følgende:
Følgende kodesnutt er hentet fra applikasjonen org.eclipse.swt.examples.helloworld.HelloWorld2. Siden applikasjonen bare viser strengen "Hello World", er det ikke nødvendig med registrering av widget-hendelser.
public static void main (String [] args) { Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER); label.setText ("Hello_world"); label.setBounds (shell.getClientArea ()); shell.open (); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } display.dispose (); }
Visningen representerer tilkoblingen mellom SWT og det underliggende grafiske brukergrensesnittet i plattformen. Visninger brukes primært til å håndtere plattformens hendelsessløyfe og styre kommunikasjonen mellom brukergrensesnittråder og andre tråder. (Du finner mer informasjon om problemer med brukergrensesnittrådbehandling under Trådbehandlingsspørsmål.)
For de fleste applikasjoner kan du følge mønsteret som brukes ovenfor. Du må opprette en visning før du oppretter vinduer og må slette visningen når skallet lukkes. Du trenger ikke tenke så mye mer på visningen med mindre du utformer en applikasjon med flere tråder.
Et skall er et "vindu" som styres av vindusstyreren i operativsystemplattformen. Skall på øverste nivå er skall som er opprettet som et underordnet objekt i visningen. Dette er vinduer som brukeren flytter, endrer størrelse på, minimerer og maksimerer mens de bruker applikasjonen. Sekundære skall er skall som er opprettet som et underordnet objekt i et annet skall. Disse vinduene brukes vanligvis som dialogboksvinduer eller andre midlertidige vinduer som bare finnes i kontekst med et annet vindu.
Alle widgeter som ikke er på øverste nivå, må ha et overordnet objekt. Skall på øverste nivå har ikke noe overordnet objekt, men opprettes i forbindelse med en bestemt visning. Du får tilgang til denne visningen ved å bruke getDisplay(). Alle andre widgeter opprettes som underordnet (direkte eller indirekte) for skall på øverste nivå.
Kompositt-widgeter er widgeter som kan ha underordnede objekter.
Når et applikasjonsvindu vises, kan du tenke på det som et widget-tre eller et hierarki der roten er skallet. Avhengig av hvor kompleks applikasjonen er, kan det finnes ett underordnet objekt for skallet, flere underordnede objekter eller nestede lag av kompositter med underordnede objekter.
Noen widget-egenskaper må defineres når widgeten opprettes og kan ikke endres senere. For eksempel kan en liste bestå av ett eller flere valg og ha eller ikke ha rullefelt.
Disse egenskapene, også kalt stiler, defineres i konstruktøren. Alle widget-konstruktører tar et int-argument som angir bitvis OR for alle ønskede stiler. I noen tilfeller er en bestemt stil å betrakte som et tips. Dette betyr at stilen ikke er tilgjengelig på alle plattformer, men vil bli ignorert på plattformer som ikke støtter den.
Stilkonstantene finnes i SWT-klassen som felles statiske felt. Du finner en liste over konstanter som kan brukes for hver widget-klasse, i API-referansen for SWT.
Plattformene for SWT krever eksplisitt tildeling og frigjøring av operativsystemressurser. I tråd med designfilosofien bak SWT, som går ut på å gjenspeile plattformens applikasjonsstruktur i widget-verktøysettet, krever SWT at du eksplisitt frigjør operativsystemressurser som du har tildelt. I SWT brukes Widget.dispose()-metoden til å frigjøre ressurser som er tilknyttet et bestemt verktøysettobjekt.
En tommelfingerregel er at hvis du oppretter et objekt, må du også fjerne objektet. Her er noen grunnregler som beskriver denne filosofien nærmere:
Det er ett unntak til disse reglene. Enkle dataobjekter, for eksempel Rectangle og Point, bruker ikke operativsystemressurser. De har ingen dispose()-metode og du trenger ikke å frigjøre dem. Hvis du er i tvil, leser du Javadoc for den aktuelle klassen.
Du finner en nærmere beskrivelse av dette emnet, i Managing operating resources.