Qual è la differenza tra Swing e AWT?

Qualcuno può spiegarmi qual è la differenza tra Swing e AWT?

Esistono casi in cui AWT è più utile / consigliato da utilizzare rispetto allo swing o viceversa?

AWT è un’interfaccia Java al codice della GUI del sistema nativo presente nel sistema operativo. Non funzionerà lo stesso su tutti i sistemi, sebbene ci provi.

Swing è una GUI più o meno pura di Java. Utilizza AWT per creare una finestra del sistema operativo e quindi dipinge le immagini di pulsanti, etichette, testo, caselle di controllo, ecc. In quella finestra e risponde a tutti i clic del mouse, le voci chiave, ecc., Decidendo autonomamente cosa fare invece di lasciare che il sistema operativo lo gestisca. Così Swing è al 100% portatile ed è lo stesso per tutte le piattaforms (anche se è personalizzabile e ha un “look and feel” che può far sembrare più o meno come apparirebbero le windows e i widget nativi).

Questi sono approcci molto diversi ai toolkit della GUI e hanno molte conseguenze. Una risposta completa alla tua domanda cercherebbe di esplorare tutti questi. 🙂 Ecco una coppia:

AWT è un’interfaccia multipiattaforma, quindi anche se utilizza il SO sottostante o il toolkit nativo della GUI per la sua funzionalità, non fornisce accesso a tutto ciò che questi toolkit possono fare. I widget AWT avanzati o più recenti che potrebbero esistere su una piattaforma potrebbero non essere supportati su un’altra. Le caratteristiche dei widget che non sono le stesse su ogni piattaforma potrebbero non essere supportate o, peggio, potrebbero funzionare diversamente su ogni piattaforma. Le persone impiegavano molto impegno per far funzionare le loro applicazioni AWT in modo coerente su tutte le piattaforms, ad esempio, potevano provare a effettuare chiamate in codice nativo da Java.

Poiché AWT utilizza i widget della GUI nativa, il sistema operativo ne conosce le funzionalità e le gestisce mettendole di fronte l’una all’altra, ecc., Mentre i widget Swing sono pixel insignificanti all’interno di una finestra dal punto di vista del sistema operativo. Swing gestisce il layout e l’impilamento dei widget. Il mixaggio di AWT e Swing è fortemente non supportato e può portare a risultati ridicoli, come i pulsanti nativi che oscurano qualsiasi altra cosa nella finestra di dialogo in cui risiedono perché tutto il resto è stato creato con Swing.

Dato che Swing cerca di fare tutto il ansible in Java, a parte le routine grafiche molto semplici fornite da una finestra nativa della GUI, è stato utilizzato per penalizzare le prestazioni rispetto a AWT. Ciò ha reso Swing, purtroppo, lento da individuare. Tuttavia, questo si è ridotto drasticamente negli ultimi anni a causa di JVM più ottimizzate, macchine più veloci e (presumo) ottimizzazione degli interni di Swing. Oggi un’applicazione Swing può essere eseguita abbastanza velocemente da essere utile o addirittura rapida, e quasi indistinguibile da un’applicazione che usa widget nativi. Alcuni diranno che ci è voluto troppo tempo per arrivare a questo punto, ma la maggior parte dirà che ne varrà la pena.

Infine, potresti anche voler controllare SWT (il toolkit GUI utilizzato per Eclipse e un’alternativa sia a AWT che a Swing), che è in qualche modo un ritorno all’idea AWT di accedere ai Widget nativi tramite Java.

La differenza di base che già tutti hanno menzionato è che uno è pesante e l’altro è leggero . Lasciatemi spiegare, in pratica, che cosa significa “peso pesante” significa che quando si utilizzano i componenti awt il codice nativo utilizzato per ottenere il componente di visualizzazione è generato dal sistema operativo , ecco perché l’aspetto cambia dal sistema operativo al sistema operativo. Laddove, come nei componenti oscillanti, è responsabilità di JVM generare la vista per i componenti. Un’altra affermazione che ho visto è che lo swing è basato su MVC e awt no.

Swing vs AWT . Fondamentalmente AWT è arrivato per primo ed è un insieme di componenti UI heavyweight (ovvero sono wrapper per gli oggetti del sistema operativo) mentre Swing si basa su AWT con un insieme più ricco di componenti leggeri.

Qualsiasi lavoro serio sull’interfaccia utente Java viene eseguito in Swing non AWT, utilizzato principalmente per le applet.

Per quanto riguarda l’AWT può essere più utile di Swing –

  • potresti scegliere come target una JVM o piattaforma precedente che non supporta Swing. Questo è stato un vero problema quando stavi sviluppando Applet: volevi raggiungere il minimo comune denominatore in modo che le persone non dovessero installare un nuovo plug-in Java. Non sono sicuro di quale sia la versione attualmente più diffusa del plug-in Java – questo potrebbe essere diverso oggi.
  • alcune persone preferiscono l’aspetto nativo di AWT rispetto alle pelli della piattaforma ‘non proprio là’ di Swing. (Ci sono migliori skin native di terze parti rispetto alle implementazioni di Swing BTW) Un sacco di gente preferiva usare il FileDialog di AWT su FileChooser di Swing perché forniva la finestra di dialogo della piattaforma a cui la maggior parte delle persone era abituata, piuttosto che lo strano Swing personalizzato.

Diverse conseguenze derivano da questa differenza tra AWT e Swing.

AWT è un sottile strato di codice sulla parte superiore del sistema operativo, mentre Swing è molto più grande. Swing ha anche funzionalità molto più ricche. Usando AWT, devi implementare molte cose tu stesso, mentre Swing le ha integrate. Per il lavoro intensivo della GUI, AWT sembra molto primitivo rispetto a Swing. Poiché Swing implementa la funzionalità GUI stessa anziché affidarsi al sistema operativo host, può offrire un ambiente più ricco su tutte le piattaforms su cui Java gira. AWT è più limitato nel fornire la stessa funzionalità su tutte le piattaforms perché non tutte le piattaforms implementano i controlli identici nello stesso modo.

I componenti Swing sono chiamati “lightweight” perché non richiedono un object OS nativo per implementare le loro funzionalità. JDialog e JFrame sono pesanti, perché hanno un pari. Quindi componenti come JButton , JTextArea , ecc. Sono leggeri perché non hanno un peer OS.

Un peer è un widget fornito dal sistema operativo, ad esempio un object pulsante o un object campo voce.

Swing:

  1. Swing fa parte delle classi di base di java.
  2. I componenti Swing sono indipendenti dalla piattaforma.
  3. I componenti dell’oscillazione sono componenti leggeri perché lo swing si trova sulla cima di un awt.

AWT:

  1. AWT è chiamato lo strumento di finestra astratta.
  2. I componenti AWT dipendono dalla piattaforma.
  3. I componenti AWT sono componenti pesanti.
  • Il componente swing fornisce un’interfaccia utente molto flessibile perché segue il controller della vista modello (mvc).
  • awt non è basato su mvc.
  • swing funziona più velocemente.
  • awt non funziona più velocemente.
  • I componenti swing sono leggeri.
  • i componenti sono pesanti.
  • lo swing occupa meno spazio di memoria.
  • awt occupa più spazio di memoria.
  • il componente oscillante è indipendente dalla piattaforma.
  • awt è dipendente dalla piattaforma.
  • swing richiede il pacchetto javax.swing.
  • awt richiede il pacchetto javax.awt.

AWT 1. AWT occupa più spazio di memoria 2. AWT dipende dalla piattaforma 3. AWT richiede il pacchetto javax.awt

oscilla 1. L’oscillazione occupa meno spazio di memoria 2. Il componente Swing è indipendente dalla piattaforma 3. Swing richiede il pacchetto javax.swing