Creare un’intefaccia grafica in Java con Swing e AWT
Java è linguaggio di programmazione tra i più diffusi al mondo che offre all’interno della propria libreria standard un framework per la realizzazione di interfacce grafiche (GUI). In questa lezione introdurremo i componenti base per creare delle interfacce grafiche che ci saranno utili per spiegare alcuni Design Pattern.
Il framework delle interfacce grafiche si basa sulle due librerie Swing e AWT (Abstract Windowing Toolkit). AWT è stata introdotta con la prima versione di Java (1.0), mentre Swing è stato inserito a partire dalla versione 1.2.
La libreria AWT per costruire una GUI utilizza gli elementi grafici (widget) del sistema operativo ospitante. Dato che col tempo è stato giudicato non conveniente, è stata sviluppata la libreria Swing che offre i propri elementi grafici in modo che siano identici per tutti i sistemi operativi.
Swing non è indipendente da AWT, anzi, ci si appoggia sopra occupandosi di disegnare il contenuto delle finestre, mentre ad AWT è stato lasciato il compito di occuparsi della cornice della finestra e della barra del titolo.
Gli elementi di un’interfaccia grafica: Frame, Button e Label
Per poter creare una finestra in Java bisogna creare un nuovo oggetto di tipo JFrame. Con la creare di questo nuovo oggetto, verrà creato in automatico un nuovo thread che si occupa della gestione eventi dell’interfaccia. La sua vita è indipendente dal thread che l’ha generato, se il thread contente il main termina, questo non avrà nessun impatto sula finestra.
Un frame è costituito da tre elementi:
- Una cornice;
- Un titolo;
- Un pannello di contenuto (contentPane).
Vediamo un esempio pratico per la creazione di una finestra con Swing/AWT.
public class FrameTest {
public static void main(String []args) {
final int WIDTH=200 , HEIGHT=200;
// Creo la finestra
JFrame frame = new JFrame();
// Imposto le dimensioni iniziali
frame.setSize(WIDTH, HEIGHT);
// Imposto la finestra al centro
frame.setLocation(350,350);
// Imposto l'operazione di chiusura
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Mostro la finestra
frame.setVisible(true);
}
}
Eseguendo il codice avremo:

L’applicazione terminerà solo quando l’utente cliccherà sull’apposita icona nella cornice della finestra.
Come aggiungere degli elementi ai JFrame
Per aggiungere oggetti come bottoni, caselle di testo ed altro bisogna aggiunge al contentPane del frame, sono tutte sottoclassi di Component. Per poter usare gli elementi all’interno della finestra dovremo:
- Ottenere il contentPane del frame con il metodo getContentPane();
- Scegliere il tipo di layout;
- Aggiunge gli elementi desiderati al frame.
Ad esempio:
package frametest;
import java.awt.*;
import javax.swing.*;
public class FrameTest {
public static void main(String []args) {
final int WIDTH=300 , HEIGHT=300;
// Creo ed imposto la finestra
JFrame frame = new JFrame();
frame.setSize(WIDTH, HEIGHT);
frame.setLocation(350,350);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Credo due bottoni
JButton b1 = new JButton("Bottone 1"),
b2 = new JButton("Bottone 1");
// Credo una linea di testo
JLabel l1 = new JLabel();
// Credo un campo di testo
JTextField t1 = new JTextField(50);
t1.setText("Inserire il testo qui");
// Imposto il contentPane
Container c = frame.getContentPane();
// Utilizzo il layout GridLayout
c.setLayout(new GridLayout(2, 2));
// Inserisco gli elementi nella finestra
frame.add(b1);
frame.add(b2);
frame.add(l1);
frame.add(t1);
// Mostro la finestra
frame.setVisible(true);
}
}
Eseguendo il codice:

Per impostare la dimensione di una finestra, oltre a setSize, esiste anche il metodo pack che consente di non indicare la dimensione della finestra. Applicando il pack al layout viene calcolata e impostata la dimensione minima della finestra in base agli elementi inseriti.
Infine per rendere visibile la finestra viene utilizzato setVisible(true). La finestra deve essere mostrato alla fine, se venisse mostrata prima dell’aggiunta degli oggetti potrebbero essere mostrati degli stadi intermedi della costruzione del frame ancora non definito.
Ecco l’indice della pagina con la lista completa di tutti i design pattern fate riferimento a questa pagina.