Domanda

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

Ci sono casi in cui AWT è più utile / consigliato da usare rispetto allo swing o viceversa?

È stato utile?

Soluzione

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, sebbene ci provi.

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 della 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 molti sforzi 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 i 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 addirittura 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 a Widget nativi tramite Java.

Altri suggerimenti

La differenza di base che già tutti hanno menzionato è che uno è pesante e l'altro è leggero . Permettetemi di spiegare, fondamentalmente che cosa significa il 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 e sentire cambiamenti da OS a OS. Dove 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 serio lavoro 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 -

  • potresti scegliere come target una JVM o una piattaforma precedente che non supporta Swing. Questo era davvero utile se stavi costruendo Applet: volevi scegliere 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ù installata del plug-in Java, oggi potrebbe essere diversa.
  • alcune persone preferiscono l'aspetto nativo di AWT rispetto alle skin della piattaforma "non del tutto" di Swing. (Ci sono skin dall'aspetto nativo di terze parti migliori rispetto alle implementazioni di Swing BTW) Molte persone preferivano usare FileDialog di AWT su FileChooser di Swing perché forniva la finestra di dialogo dei file della piattaforma a cui la maggior parte delle persone era abituata piuttosto che quella "strana" personalizzata 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. Usando AWT, devi implementa molte cose tu stesso, mentre Swing le ha integrate Lavoro ad alta intensità di interfaccia grafica, AWT sembra molto primitivo con cui lavorare rispetto a Swing. Perché Swing implementa la funzionalità GUI stessa piuttosto che fare affidamento su 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 nello stesso aspetto modi.

I componenti oscillanti sono chiamati "leggeri". perché non richiedono a 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 ad esempio un   oggetto pulsante o un oggetto campo di immissione.

Altalena:

  1. Swing fa parte delle classi di fondazione java.
  2. I componenti Swing sono indipendenti dalla piattaforma.
  3. I componenti dell'oscillazione sono componenti leggeri perché l'altalena si trova nella parte superiore di awt.

AWT:

  1. AWT è chiamato lo strumento finestra astratta.
  2. I componenti AWT dipendono dalla piattaforma.
  3. I componenti AWT sono componenti pesanti.
  • componente swing fornisce un'interfaccia utente molto flessibile perché seguire il controller vista modello (mvc).
  • awt non è basato su mvc.
  • swing funziona più velocemente.
  • awt non funziona più velocemente.
  • i componenti dell'oscillazione sono leggeri.
  • con componenti pesanti.
  • swing occupa meno spazio di memoria.
  • awt occupa più spazio di memoria.
  • il componente swing è indipendente dalla piattaforma.
  • awt dipende dalla piattaforma.
  • swing richiede il pacchetto javax.swing.
  • 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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top