# Java/AWT e Swing

* Java
* Linguaggio Java
* categoria · sviluppo ·
* Come posso contribuire?
* → Vai su Wikiversity
* Guida alla programmazioneJava/Introduzione - Specifica di linguaggioJava/Tipi di dato - Libreria standard
* Comunicazione serialeJava/Comunicazione seriale
* Stream
* Input e output su consoleJava/Input e output
* Java Collections Framework
* AWT e SwingJava/AWT e Swing
* Reflection
* SerializzazioneJava/Serializzazione
* SocketJava/Socket

## AWT e Swing

Lo standard ufficiale per la realizzazione delle GUI è Swing, implementato in un insieme di classi che si trovano sotto il package javax.swing e i suoi sottopackages. Esso ha esteso il vecchio sistema, AWT, che soffriva di numerosi difetti.
In entrambi, il programma crea e manipola finestre e componenti grafici senza preoccuparsi della loro effettiva implementazione. Il meccanismo è il seguente:
* il programma richiede alle librerie (AWT o Swing che sia) la creazione o la modifica di oggetti che rappresentano finestre, componenti grafici, ecc.;
* l'implementazione della libreria si occupa della loro visualizzazione grafica, delegandola, in ultima analisi, al sistema operativo.
La differenza principale tra AWT e Swing sta nel livello al quale viene concretizzato il punto 2. AWT delega al sistema operativo la creazione e l'implementazione interna delle finestre e dei componenti, mentre Swing utilizza, dovunque possibile, codice scritto direttamente in Java. Questo codice costituisce, appunto, l'implementazione delle classi che fanno parte della libreria Swing, e viene eseguito insieme con il codice del programma, nella stessa macchina virtuale.
Nonostante i numerosi vantaggi di Swing rispetto ad AWT, ad oggi esistono ancora classi di AWT che sono molto utilizzate; questo essenzialmente perché
* Swing non è stato costruito partendo da zero, ma sulla base delle classi fondamentali del sistema grafico AWT (Component, Container, LayoutManager e le sue implementazioni, gestione degli eventi, ecc.)
* AWT non comprende solo classi riguardanti strettamente la GUI, ma anche classi per la gestione della stampa, per la manipolazione di immagini, di forme geometriche, ecc.
Per questi motivi, il package java.awt e i suoi sottopackages risultano ancora oggi importati tantissimo e Swing va considerato non come un rimpiazzo di AWT, ma, piuttosto, come una sua estensione.

## Approfondimenti

Alcuni strumenti sono stati messi a disposizione degli sviluppatori che hanno problemi con Swing o che non ne conoscono tutte le funzionalità.

### Java Developer Kit

* lo SwingSet2, che è un programmino dimostrativo delle funzionalità di Swing, ed è disponibile a questo indirizzo e nella sottocartella /demo/jfc/SwingSet2 del JDK. Il codice sorgente che crea gli oggetti Swing visibili sullo schermo è disponibile scegliendo la tab "Source code" all'interno del programma, e anche nella sottocartella /src della cartella in cui è il demo;
* gli altri demo inclusi nel JDK sotto la cartella /demo/jfc/;

### Guide

* un'altra guida è disponibile tra i Java Tutorials e prende il nome di Creating a GUI with JFC/Swing;
* Anche in un altro tutorial è integrata una piccola sezione sullo Swing, più breve e forse meno completa, ma comunque utile.

## Note

* ↑ In realtà, anche il sistema Swing non può fare a meno di effettuare determinate chiamate di base al sistema operativo, poiché è quest'ultimo che, in fondo, ha il controllo finale dell'ambiente grafico. Il concetto su cui si basa Swing è che queste chiamate possono essere realmente ridotte all'osso, perché la gran parte del codice che si occupa di implementare l'aspetto grafico e perfino il comportamento dei componenti può essere implementata in Java.