Interfacce grafiche in Java
Java offre numerosi (3) metodi per realizzare interfacce grafiche:
- Java AWT
- Java Swing (dalla versione 2 di Java - 1.2 di JDK)
- Java FX (dalla versione 8 di Java - 1.8 JDK)
Java AWT e Java Swing offrono editor WYSIWYG di terze parti per la grafica, che viene offerto nativamente da Java FX
Vediamo come fare una semplice interfaccia Grafica con i 3 metodi:
Java Swing
Java Swing è la libreria più usata, e forse anche la più “semplice”.
La struttura di una applicazione in Swing è la seguente:
Esempio 01
Di seguito viene riportato lo stesso esempio realizzato in due modi diversi in cui viene usato l’evento del click del mouse e la copia del valore di una TextField:
Esempio 02
Di seguito un codice in cui vengono usati altri elementi e due possibili variabili dello stesso codice:
I componenti delle interfacce grafiche in Java
Dopo questo breve overview sulle interfacce grafiche in Java, andiamo ad analizzare brevemente come funziona il tutto. Innanzitutto dobbiamo fare due distinzioni:
- Top-level container: Contenitori che non possono essere inseriti in altri contenitori: Es. JFrame, JDialog, JApplet
- Intermediate container: Servono per semplificare la posizione di sottoparti dell’interfaccia: Es. JPanel, JSplitPane, JTabbedPane. In assenza del suddetto container è sempre possibile posizionare gli elementi grafici tramite il default container tramite il metodo .getContentPane() applicato ad un Top-level container.
I componenti sono frutto di ereditarietà, quindi offrono un’interfaccia (verso il programmatore) molto simile tra loro con numerosi vantaggi. Inoltre offre un’interfaccia simile all’utilizzo di liste per le operazioni di inserimento e rimozione di elementi (metodi add() e remove()).
Inoltre bisogna anche gestire la posizione dei singoli elementi all'interno dell’interfaccia grafica tramite dei dei gestori di layoutManager. Il layout manager si occupa di posizionare(ed eventualmente riposizionare) le vari parti che compongono l’interfaccia, per ogni contenitore può essere impostato un layoutManager. Nei due esempi sovrastanti non è stato impostato nessun layout manager, ma nel primo caso il container di default utilizza una organizzazione Left to right,
Top to bottom, nel secondo caso viene utilizzata una gestione a pixel assoluti.
Swing offre i seguenti layoutManager:
Inoltre Swing non vieta di realizzare layout complessi del tipo:
Eventi in Java Swing/AWT
Le azioni che l’utente compie sull’interfaccia, generano degli eventi.
- Click o double clicks del mouse;
- Inserimento di testo in textField;
- Chiusura di una finestra;
- Ridimensionamento di una finestra;
Bisogna definire “cosa fare” nel momento in cui si verifica un’evento. Java Swing e Java AWT organizzano allo stesso modo la gestione degli eventi, tramite alcune interfacce “listener”, cioè che “ascoltano” l’evento. Definiscono i metodi che devono essere implementati da ogni oggetto che desidera essere informato dell’accadere di un particolare tipo di evento. Tutti i metodi ascoltatori hanno un’unico parametri, normalmente, chiamato “e” che contiene informazioni utili sulla generazione dell’evento e il relativo oggetto che ha fatto scaturire l’evento accessibile tramite e.getSource().
Uso finestre di dialogo: di input, di allarme o di scelta multipla
La classe JOptionPane permette di creare facilmente una dialog box standard di tipo “pop up” che consente all’utente di inserire dati o essere avvisato di qualcosa. Essa ha uno stile generico con ul layout simile a questa immagine:
Vediamo alcuni esempi:
JOptionPane.showMessageDialog(null, "Mario");
JOptionPane.showConfirmDialog(null, "Conferma");
JOptionPane.showInputDialog ("Come ti chiami?");
String nome = JOptionPane.showInputDialog ("Come ti chiami?", "Mario");
Object[] possibleValues = { "prima", "seconda" };
Object sel_input = JOptionPane.showInputDialog(null, "Scegli", "Lettura", JOptionPane.INFORMATION_MESSAGE, null, possibleValues, possibleValues[0]);
Apertura e salvataggio di un file
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("File XML", "xml"));
int n = fileChooser.showOpenDialog(getComponent());
if (n == JFileChooser.APPROVE_OPTION) {
// AZIONI DA FARE
}
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("File XML", "xml"));
int n = fileChooser.showSaveDialog(getComponent());
if (n == JFileChooser.APPROVE_OPTION) {
// AZIONI DA FARE
}