Risposte:
AWT è un'interfaccia Java per il codice GUI del sistema nativo presente nel tuo sistema operativo. Non funzionerà allo stesso modo su tutti i sistemi, anche se ci prova.
Swing è una GUI Java più o meno pura. Utilizza AWT per creare una finestra del sistema operativo e quindi dipinge immagini di pulsanti, etichette, testo, caselle di controllo, ecc. In quella finestra e risponde a tutti i clic del mouse, le voci dei tasti, ecc., Decidendo autonomamente cosa fare invece di lasciarlo gestire dal sistema operativo. Quindi Swing è portatile al 100% ed è lo stesso su tutte le piattaforme (anche se è personalizzabile e ha un "aspetto collegabile" che può renderlo più o meno simile a come apparirebbero le finestre e i widget nativi).
Questi sono approcci molto diversi ai toolkit GUI e hanno molte conseguenze. Una risposta completa alla tua domanda proverebbe a esplorare tutte quelle. :) Eccone un paio:
AWT è un'interfaccia multipiattaforma, quindi anche se utilizza il sistema operativo sottostante o il toolkit GUI nativo per le sue funzionalità, non fornisce l'accesso a tutto ciò che tali toolkit possono fare. I widget AWT avanzati o più recenti che potrebbero esistere su una piattaforma potrebbero non essere supportati su un'altra. Le funzionalità dei widget che non sono le stesse su ogni piattaforma potrebbero non essere supportate o, peggio ancora, potrebbero funzionare in modo diverso su ciascuna piattaforma. Le persone erano solite investire molto sforzo per far funzionare le loro applicazioni AWT in modo coerente su piattaforme diverse, ad esempio, potrebbero provare a effettuare chiamate in codice nativo da Java.
Poiché AWT utilizza widget GUI nativi, il tuo sistema operativo li conosce e gestisce mettendoli uno di fronte all'altro, ecc., Mentre i widget Swing sono pixel senza significato all'interno di una finestra dal punto di vista del tuo sistema operativo. Swing stesso gestisce il layout e l'impilamento dei widget. Il mix di AWT e Swing non è supportato e può portare a risultati ridicoli, come pulsanti nativi che oscurano tutto il resto nella finestra di dialogo in cui risiedono perché tutto il resto è stato creato con Swing.
Poiché Swing tenta di fare tutto il possibile in Java oltre alle routine grafiche molto grezze fornite da una finestra della GUI nativa, ha comportato una penalizzazione delle prestazioni rispetto ad AWT. Questo ha reso Swing sfortunatamente lento ad afferrare. Tuttavia, questo si è ridotto drasticamente negli ultimi anni a causa di JVM più ottimizzate, macchine più veloci e (presumo) ottimizzazione degli interni Swing. Oggi un'applicazione Swing può essere eseguita abbastanza velocemente da essere utile o anche zippy e quasi indistinguibile da un'applicazione utilizzando widget nativi. Alcuni diranno che ci è voluto troppo tempo per arrivare a questo punto, ma molti diranno che ne vale la pena.
Infine, potresti anche voler dare un'occhiata a SWT (il toolkit della GUI usato per Eclipse e un'alternativa sia ad AWT che a Swing), che è in qualche modo un ritorno all'idea di AWT di accedere ai widget nativi tramite Java.
La differenza di base che già tutti hanno menzionato è che uno è pesante e l'altro è leggero . Permettetemi di spiegare, in sostanza il significato del termine heavyweight è che quando si utilizzano i componenti awt il codice nativo utilizzato per ottenere il componente di visualizzazione viene generato dal sistema operativo , ecco perché l'aspetto cambia da sistema operativo a sistema operativo. Laddove, come nei componenti swing, è responsabilità di JVM generare la vista per i componenti. Un'altra affermazione che ho visto è che swing è basato su MVC e non lo è.
Swing vs AWT . Fondamentalmente AWT è arrivato per primo ed è un insieme di componenti UI pesanti (nel senso che sono involucri per gli oggetti del sistema operativo) mentre Swing è costruito sopra AWT con un set più ricco di componenti leggeri.
Qualsiasi lavoro serio sull'interfaccia utente Java viene eseguito in Swing non AWT, utilizzato principalmente per le applet.
Fino a quando AWT può essere più utile di Swing -
Diverse conseguenze derivano da questa differenza tra AWT e Swing.
AWT è un sottile strato di codice nella parte superiore del sistema operativo, mentre Swing è molto più grande. Swing ha anche funzionalità molto più ricche. Utilizzando AWT, devi implementare molte cose tu stesso, mentre Swing le ha integrate. Per il lavoro ad alta intensità di GUI, AWT si sente molto primitivo con cui lavorare rispetto a Swing. Poiché Swing implementa la funzionalità GUI stessa anziché fare affidamento sul sistema operativo host, può offrire un ambiente più ricco su tutte le piattaforme su cui è in esecuzione Java. AWT è più limitato nel fornire la stessa funzionalità su tutte le piattaforme perché non tutte le piattaforme implementano gli stessi controlli allo stesso modo.
I componenti Swing sono chiamati "leggeri" perché non richiedono un oggetto SO nativo per implementare la loro funzionalità. JDialog
e JFrame
sono dei pesi massimi, perché hanno un pari. Quindi componenti come JButton
,
JTextArea
ecc. Sono leggeri perché non hanno un peer del sistema operativo.
Un peer è un widget fornito dal sistema operativo, come un oggetto pulsante o un oggetto campo di immissione.
Swing:
AWT:
AWT 1. AWT occupa più spazio di memoria 2. AWT dipende dalla piattaforma 3. AWT richiede il pacchetto javax.awt
altalene 1. Swing occupa meno spazio di memoria 2. Il componente Swing è indipendente dalla piattaforma 3. Swing richiede il pacchetto javax.swing