Il workbench fornisce un vasto insieme di classi e interfacce per creare interfacce utente complesse. Fortunatamente, per cominciare a utilizzarle, non è necessario conoscerle tutte. In questa sezione, saranno innanzitutto analizzati alcuni concetti esposti nell'interfaccia utente del workbench e la corrispondente struttura sottostante.
Il termine workbench indica comunemente "la finestra che si apre all'avvio della piattaforma." Di seguito sono illustrati alcuni dei componenti visivi da cui è costituito.
Nel resto della trattazione, con il termine workbench sarà indicata esclusivamente la finestra di workbench IWorkbenchWindow. La finestra di workbench è la finestra che viene visualizzata in primo piano in un workbench. Costituisce il frame, all'interno del quale vengono posizionate barra dei menu e degli strumenti, barra di stato, barra di scelta rapida e pagine. Generalmente, la finestra di workbench non richiede alcuna programmazione ed è rilevante solo per il suo contenuto.
Nota: è possibile aprire finestre multiple di un workbench; tuttavia, poiché ogni finestra del workbench rappresenta un mondo indipendente di editor e viste, è possibile operare in primo piano su una soltanto di esse.
Dal punto di vista dell'utente, un workbench contiene viste ed editor. Altre classi contribuiscono all'implementazione della finestra del workbench.
All'interno della finestra del workbench è possibile trovare una pagina IWorkbenchPage, contenente a sua volta delle parti. Le pagine rappresentano il meccanismo attraverso il quale vengono implementate associazioni di parti. Generalmente non è necessario programmare la pagina, tuttavia, essa sarà visibile nel contesto della programmazione e del debug.
Le prospettive forniscono un ulteriore livello di organizzazione all'interno di una finestra di workbench. Una prospettiva definisce una raccolta di viste, layout e azioni ad esse applicabili per una determinata attività dell'utente. Gli utenti possono passare da una prospettiva all'altra mentre si spostano tra le attività. Dal punto di vista dell'implementazione, la prospettiva attiva controlla quali viste sono mostrate nella pagina del workbench e la loro posizione e dimensione. Gli editor non sono interessati da una modifica di prospettiva.
Viste ed editor costituiscono le opzioni di implementazione di alcune comuni programmazioni plug-in. Quando viene aggiunto un componente visivo al workbench, è necessario decidere se si desidera implementare una vista o un editor. In base a quali considerazioni, viene effettuata la scelta?
Viste ed editor devono essere, comunque, entrambi creati secondo un ciclo di vita standard.
Durante tutto questo ciclo di vita, gli eventi notificheranno, dalla pagina del workbench in cui sono contenuti alle parti interessate, l'apertura, attivazione, disattivazione e chiusura delle viste ed editor.
Come si vede, viste ed editor del workbench sono molto semplici. Contengono i widget e, a seconda delle esigenze dell'utente, possono risultare semplici o complessi. La vista più semplice è stata illustrata in precedenza nell'esempio Hello World. È bene riprenderlo in esame ora che l'argomento è stato ulteriormente approfondito.
package org.eclipse.examples.helloworld; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.SWT; import org.eclipse.ui.part.ViewPart; public class HelloWorldView extends ViewPart { Label label; public HelloWorldView() { } public void createPartControl(Composite parent) { label = new Label(parent, SWT.WRAP); label.setText("Hello World"); } public void setFocus() { // impostare come attivo il widget. Per un'etichetta, ciò non // è significativo, ma per insiemi più complessi di widget // è necessario decidere a quale widget assegnare lo stato attivo. } }
Si osservi che non è stato necessario implementare alcun metodo dispose(), visto che è stata soltanto creata un'etichetta nel metodo createPartControl(parent). Qualsiasi risorsa dell'interfaccia utente allocata, come immagini o tipi di carattere, avrebbe dovuto essere eliminata in questo punto. Poiché è stata estesa la classe ViewPart, è stata ereditata l'implementazione di dispose(), "Non eseguire alcuna operazione".