Widget

Sebbene SWT includa diverse funzioni complesse, è sufficiente una conoscenza di base degli elementi principali del sistema, quali i widget, i layout e gli eventi, per implementare applicazioni utili e potenti.

Struttura di applicazione di widget

Se si forniscono elementi UI mediante estensioni del workbench della piattaforma, i meccanismi di avvio di SWT vengono gestiti dal workbench.

Per scrivere un'applicazione SWT partendo da zero e fuori dal workbench, è necessario comprendere meglio la struttura applicativa di SWT.

Una tipica applicazione SWT autonoma presenta la seguente struttura:

Il seguente frammento di codice è stato adattato dall'applicazione org.eclipse.swt.examples.helloworld.HelloWorld2. Poiché l'applicazione visualizza soltanto la stringa "Hello World", non è necessario registrare tutti gli eventi widget.

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

Visualizzazione

La visualizzazione rappresenta la connessione tra SWT e il sistema GUI della piattaforma sottostante. Le visualizzazioni sono utilizzate principalmente per gestire il ciclo di eventi della piattaforma e controllare la comunicazione tra il thread dell'interfaccia utente e altri thread. Per una trattazione completa del thread dell'interfaccia utente, consultare la sezione Problemi relativi ai thread per i client.

Per la maggior parte delle applicazioni è possibile seguire il modello utilizzato in precedenza. Prima di creare una finestra, è necessario creare una visualizzazione e organizzarla quando la shell è chiusa. Non è necessario dedicare molto tempo alla visualizzazione, a meno che non si stia progettando un'applicazione a più thread.

Shell

Una shell è una  "finestra" gestita dal gestore delle finestre della piattaforma del sistema operativo. Le shell di livello superiore sono create come elementi secondari della visualizzazione. Si tratta delle finestre che gli utenti spostano, ridimensionano, riducono a icona e ingrandiscono quando utilizzano l'applicazione. Le shell secondarie sono quelle create come elemento secondario di un'altra shell. Queste finestre vengono in genere utilizzate come finestre di dialogo o altre finestre transitorie che possono esistere solo all'interno di un'altra finestra.

Elementi principali e secondari

Tutti i widget che non sono di livello superiore devono disporre di un elemento principale. Le shell di livello superiore non dispongono di un elemento principale ma vengono create in associazione con una particolare visualizzazione. Si può accedere a questa visualizzazione utilizzando getDisplay(). Tutti gli altri widget discendono (direttamente o indirettamente) da shell di livello superiore.

I widget composti sono widget che possiedono elementi secondari.

La finestra di un'applicazione può essere considerata come una struttura widget o una gerarchia, il cui elemento principale è la shell. A seconda della complessità dell'applicazione, la shell può disporre di uno o più elementi secondari o di layer nidificati di widget composti con elementi secondari.

Ciclo di vita di un widget

Quando l'applicazione crea un widget, SWT crea immediatamente il widget della piattaforma sottostante. Ciò rende inutile la presenza di un codice che operi in modo differente a seconda della presenza o meno del widget del sistema operativo sottostante e consente di conservare la maggior parte deidati dei widget nel layer della piattaforma anziché replicarli nel toolkit. Pertanto il modo in cui il toolkit considera il ciclo di vita di un widget deve essere conforme alle regole del sistema GUI sottostante.

Creazione di un widget

La maggior parte delle piattaforme GUI richiede che venga specificato un elemento principale durante la creazione di un widget. Poiché SWT crea un widget della piattaforma non appena viene creato un widget del toolkit, occorre specificare il widget principale nel corrispondente costruttore.

Cenni sullo stile

Alcune proprietà dei widget devono essere impostate nel sistema operativo al momento della creazione di un widget e non possono essere modificate in seguito. Ad esempio, un elenco può essere a selezione singola o multipla ed essere dotato o meno di barre di scorrimento.

Queste proprietà, denominate stili, devono essere impostate nel costruttore. Tutti i costruttori di widget utilizzano un argomento int che specifica l'operatore OR bit per bit di tutti gli stili desiderati. A volte uno stile particolare viene considerato un suggerimento, nel senso che può non essere disponibile su tutte le piattaforme, ma sarà correttamente ignorato sulle piattaforme su cui non è supportato.

Le costanti di stile sono posizionate nella classe SWT in qualità di campi statici pubblici. Un elenco delle costanti applicabili a ciascuna classe di widget è contenuto nel Riferimento API per SWT.

Eliminazione delle risorse

Le piattaforme del sistema operativo su cui sui basa SWT richiedono un'esplicita assegnazione e liberazione delle risorse del sistema operativo. La filosofia di progettazione di SWT, in base alla quale la struttura applicativa della piattaforma deve essere riflessa nel toolkit di widget, rende necessario liberare esplicitamente tutte le risorse del sistema operativo che sono state assegnate. In SWT, il metodo Widget.dispose() viene utilizzato per liberare le risorse associate a un particolare oggetto del toolkit.

La regola generale è che qualsiasi oggetto creato deve essere eliminato. Di seguito, sono riportate alcune regole base specifiche che spiegano ulteriormente questa filosofia.

Esiste una eccezione a queste regole. Gli oggetti dati semplici, ad esempio un Rettangolo ed un Punto, non utilizzano risorse del sistema operativo. Non includono un metodo dispose() e non è necessario rilasciarli. In caso di dubbi, controllare la classe in Javadoc.

Per ulteriori informazioni su questo argomento, vedere Gestione delle risorse operative.

Copyright IBM Corporation e altri 2000, 2003.