Gränssnittskontroller

SWT innehåller många bra funktioner men en grundläggande kunskap om kärnan i systemet, gränssnittskontroller, layouter och händelser, är allt som behövs för att kunna implementera användbara och stabila tillämpningar.

Tillämpningsstruktur för gränssnittskontroller

När du bidrar med användargränssnittselement med hjälp av arbetsmiljöutökningar i plattformen hanteras uppstarten av SWT av arbetsmiljön.

Om du skriver en SWT-tillämpning från början utanför arbetsmiljön måste du veta mer om SWT:s tillämpningsstruktur.

En vanlig, fristående SWT-tillämpning har följande struktur:

Följande kodstycke har anpassats från tillämpningen org.eclipse.swt.examples.helloworld.HelloWorld2. Eftersom tillämpningen bara visar strängen "Hello World" behöver inga gränssnittskontrollhändelser registreras.

   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 ();
   }

Visa

Visningen representerar anslutningen mellan SWT och underliggande plattforms grafiska användargränssnitt. Visningar används i första hand för att hantera plattformshändelseloopen och styra kommunikationen mellan användargränssnittstråden och andra trådar. (I Trådproblem för klienter finns en omfattande beskrivning av problem med användargränssnittstrådar.)

För de flesta tillämpningar kan du följa det mönster som används ovan. Du måste skapa en visning innan du skapar några fönster och du måste ta bort visningen när skalet stängs. Du behöver inte tänka så mycket mer på visningen, om du inte utformar en tillämpning med flera trådar.

Skal

Ett skal är ett "fönster" som hanteras av operativsystemets fönsterhanterare. Skal på översta nivån är de som skapas som ett underordnat objekt till visningen. Dessa fönster är de fönster som användare flyttar, ändrar storlek på, minimerar och maximerar medan de använder tillämpningen. Sekundära skal är de som skapas som underordnade objekt till ett annat skal. Dessa fönster används vanligen som dialogrutor eller andra tillfälliga fönster, som bara existerar i kontext med ett annat fönster.

Överordnade och underordnade objekt

Alla gränssnittskontroller som inte är skal på högsta nivån måste ha ett överordnat objekt. Skal på översta nivån har inget överordnat objekt men de skapas tillsammans med en viss visning. Du kan accessa visningen med hjälp av getDisplay(). Alla andra gränssnittskontroller skapas så att de är underordnade (direkt eller indirekt) skal på högsta nivån.

Sammansatta gränssnittskontroller är gränssnittskontroller som kan ha underordnade objekt.

När ett tillämpningsfönster visas kan du tänka på det som ett gränssnittskontrollträd, eller en hierarki, vars rot är skalet. Beroende på tillämpningens komplexitet kan det finnas ett enda underordnat objekt till skalet, flera underordnade objekt eller nästlade lager av sammansättningar med underordnade objekt.

Stilbitar

Vissa egenskaper för gränssnittskontrollen måste anges när elementet skapas och kan inte ändras i efterhand. Exempelvis kan en lista vara en- eller flerval och ha/inte ha bläddringslister.

Dessa egenskaper, som kallas stilar, anges i konstruktorn. Alla gränssnittskontrollkonstruktorer kan ta argumentet int som anger bitvis OR för alla önskade stilar. I vissa fall kan en viss stil betraktas som ett tips, vilket innebär att det kanske inte är tillgängligt överallt utan ignoreras på plattformar där det inte kan användas.

Stilkonstanterna finns i SWT-klassen som publikastatiska fält. En lista över användbara konstanter för varje gränssnittskontrollklass finns i API Reference för SWT.

Resursborttag

Plattformarna under SWT kräver uttrycklig allokering och frisläppande av operativsystemresurser. I enlighet med SWT:s designfilosofi med att spegla plattformens tillämpningsstruktur i verktygsuppsättningen för gränssnittskontroller, kräver SWT att du uttryckligen frisläpper alla operativsystemresurser som du har allokerat. I SWT används Widget.dispose()-metoden för att frisläppa resurser för ett visst objekt i verktygsuppsättningen.

Tumregeln är att om du skapar objektet måste du ta bort det. Här följer några specifika grundregler som ytterligare förklara filosofin:

Det finns ett undantag till dessa regler. Enkla dataobjekt, t.ex. Rectangle och Point använder inte operativsystemresurser. De har inte någon dispose()-metod och du behöver inte frisläppa dem. Om du tvekar läser du javadoc för aktuell klass.

I Managing operating resources finns ytterligare information om det här ämnet.