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 ai livelli più alti della piattaforma Eclipse. Ad esempio, il tag plugin.xml per i contributi UI specifica il contenuto della barra degli strumenti e del menu senza richiedere alcuna programmazione SWT. Inoltre, i visualizzatori e le azioni JFace forniscono implementazioni per le comuni interazioni tra le applicazioni e i 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.
Un problema comune nella progettazione dei toolkit di widget è rappresentato dalla tensione tra toolkit portatili e integrazione della piattaforma. Java AWT (Abstract Window Toolkit) fornisce widget integrati alla piattaforma per i widget di livello inferiore quali elenchi, testi e pulsanti ma non fornisce l'accesso ai componenti della piattaforma di livello superiore, ad esempio strutture o testo RTF. Questo porta gli sviluppatori di applicazioni a una situazione di "minimo comune denominatore" in cui 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ò fornisce diverse funzionalità che tuttavia non riguardano le applicazioni sviluppate in Swing. Grazie ai livelli di emulazione dell'aspetto della piattaforma le applicazioni possono somigliare il più possibile alla piattaforma, ma l'interazione dell'utente è abbastanza diversa da essere notata. Ciò rende difficile l'utilizzo dei toolkit di emulazione per la creazione di applicazioni che competono con applicazioni ristrette, sviluppate specificamente per la piattaforma di un particolare sistema operativo.
SWT risolve questo problema definendo un'API portatile comune fornita su tutte le piattaforme supportate e implementando l'API su ogni piattaforma che utilizza i widget nativi, laddove possibile. In questo modo il toolkit può riflettere immediatamente eventuali modifiche relative all'aspetto della GUI del sistema operativo sottostante, mantenendo contemporaneamente un modello di programmazione coerente su tutte le piattaforme.
Il problema del "minimo comune denominatore" viene risolto da SWT in diversi modi:
L'integrazione della piattaforma non è strettamente un problema di aspetto. Un'accurata integrazione comprende la capacità di interagire con le 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 nell'articolo
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 l'associazione 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. Nel codice C non è nascosto alcun aspetto della piattaforma. 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 una chiamata a un metodo nativo, la chiamata all'API della piattaforma con gli stessi parametri del codice C determinerà lo stesso errore. Una descrizione completa di questo problema è disponibile in Strategia di implementazione SWT per nativi Java.