SWT (Standard Widget Toolkit)

SWT è un toolkit di widget per sviluppatori Java che fornisce un'API portatile e un'accurata integrazione con la piattaforma GUI del sistema operativo nativo sottostante.

Molte attività di programmazione di livello inferiore dell'interfaccia utente vengono gestite in livelli più alti della piattaforma Eclipse. Il tag di plugin.xml per le contribuzioni dell'interfaccia utente specifica il contenuto di menu e barre degli strumenti senza il bisogno di alcuna programmazione SWT. Le azioni e i visualizzatori JFace forniscono implementazioni per le interazioni comuni tra applicazioni e widget. Tuttavia, la conoscenza dell'architettura SWT sottostante e dei concetti di progettazione è importante per comprendere il modo in cui opera il resto della piattaforma.

Portabilità e integrazione della piattaforma

Un problema comune nella progettazione dei toolkit di widget è rappresentato dalla tensione tra toolkit portatili e integrazione della piattaforma. Java AWT (Advanced Widget Toolkit) fornisce widget integrati alla piattaforma per widget di livello inferiore quali elenchi, testo e pulsanti, ma non fornisce l'accesso a componenti di livello superiore della piattaforma quali strutture o rich text. Questo spinge gli sviluppatori di applicazioni in una situazione di "minimo comun denominatore": essi possono utilizzare solo i widget disponibili su tutte le piattaforme.

Il toolkit Swing tenta di risolvere questo problema fornendo implementazioni non native di widget di alto livello, quali strutture, tabelle e testo. Ciò offre una grande funzionalità, ma le applicazioni sviluppate in Swing ne restano escluse. I livelli di emulazione di aspetto e funzionalità della piattaforma aiutano le applicazioni ad assomigliare il più possibile alla piattaforma, ma l'interazione dell'utente è abbastanza diversa da essere notata. Ciò rende difficile l'utilizzo di toolkit di emulazione per la creazione di applicazioni che competono con applicazioni ristrette o sovrapposte sviluppate specificamente per la piattaforma di un particolare sistema operativo.

SWT risolve questo problema definendo un'API portatile comune che viene fornita su tutte le piattaforme supportate e implementando l'API su ogni piattaforma mediante widget nativi, dove possibile. Questo consente al toolkit di riflettere immediatamente qualsiasi modifica all'aspetto e alla funzionalità della GUI del sistema operativo sottostante, mantenendo contemporaneamente un modello di programmazione coerente su tutte le piattaforme.

Il problema del "minimo comun denominatore" viene risolto da SWT in diversi modi.

Congruenza con la piattaforma

L'integrazione deella piattaforma non è strettamente un problema di aspetto e funzionalità. Un'accurata integrazione comprende la capacità di interagire con funzioni native del desktop, ad esempio la funzione di trascinamento e rilascio, integrare applicazioni desktop del sistema operativo e utilizzare componenti sviluppati con modelli di componenti del sistema operativo come Win32 ActiveX.

Il supporto SWT ActiveX viene illustrato in Supporto ActiveX in SWT.

La congruenza è anche ottenuta nello stesso codice attraverso un'implementazione familiare per lo sviluppatore del sistema operativo nativo. Anziché nascondere le differenze di sistema operativo nel codice C nativo oppure tentare di creare livelli portatili e non nell'implementazione Java, SWT offre implementazioni distinte e separate in Java per ogni piattaforma.

Un'importante regola di implementazione consiste nel fatto che i nativi in C effettuano il mapping uno a uno con le chiamate al sistema operativo. Un programmatore Windows riconoscerà immediatamente l'implementazione del toolkit SWT su Windows, poiché utilizza codici nativi che si associano direttamente alle chiamate di sistema utilizzate in C. Niente della "piattaforma magica" viene nascosto nel codice C. Uno sviluppatore della piattaforma può esaminare il codice e sapere esattamente quali chiamate di piattaforma vengono eseguite dal toolkit. Ciò semplifica enormemente la funzione di debug. Se si verifica un malfunzionamento durante il richiamo di metodi nativi, il richiamo dell'API della piattaforma con gli stessi parametri del codice C determinerà lo stesso malfunzionamento.  (Una completa descrizione di questo problema è reperibile in Strategia di implementazione SWT per nativi Java.)