Programmazione Java: Interfacce grafiche (GUI)

Programmazione Java:
Interfacce grafiche (GUI)
Romina Eramo
[email protected]
http://www.di.univaq.it/romina.eramo/tlp
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Interfacce grafiche (GUI) (1)‫‏‬
“Rendere facili le cose semplici
e possibili le cose difficili”
›  Obiettivo: consentire al programmatore di costruire
un’interfaccia adatta per tutte le piattaforme
»  Libreria GUI (graphical User Interface) di Java 1.0 non
raggiunge l’obiettivo
»  Libreria AWT di Java 1.0 caratterizzata da notevoli limiti
»  Libreria Swing di Java 1.2 fornisce un approccio più chiaro
e orientato agli oggetti
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Swing
›  Approccio orientato ad oggetti
»  modello di programmazione a componenti che
consente la facile creazione di ambienti di
sviluppo visuali
›  Fornisce un ricco insieme di oggetti JavaBean
»  facili da utilizzare e comprendere
»  possono essere trascinati, incollati, ma anche
programmati manualmente, per creare GUI
apprezzabili
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Swing: risorse
›  Libri
Thinking in Java 4 ed. Volume 3
Concorrenza e interfacce grafiche Autore: Bruce Eckel
Casa Editrice: Pearson ISBN: 8871923057
›  Java Tutorial – Swing Trial
»  http://docs.oracle.com/javase/tutorial/uiswing/index.html
›  Swing Documentation
»  http://docs.oracle.com/javase/7/docs/technotes/guides/swing/
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Nozioni di base su Swing (1)
›  JFrame: modulo (form) che crea una finestra in modo
indipendente dal sistema operativo
import javax.swing.*; !
Indica come chiudere la finestra
(pulsante o tastiera)
public class HelloSwing { !
public static void main(String[] args) { !
JFrame frame = new JFrame("Hello Swing"); !
Indica di chiudere
definitivamente il
programma
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); !
frame.setSize(300, 100); !
frame.setVisible(true); !
} !
} !
Rende la finestra
visibile
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Nozioni di base su Swing (2)
›  JLabel: definisce un’area per testo e/o immagini
import javax.swing.*; !
import java.util.concurrent.*; !
public class HelloLabel { !
public static void main(String[] args) throws Exception { !
JFrame frame = new JFrame("Hello Swing"); !
JLabel label = new JLabel("A Label"); !
frame.add(label); !
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); !
frame.setSize(300, 100); !
frame.setVisible(true); !
TimeUnit.SECONDS.sleep(1); !
label.setText("Hey! This is Different!"); !
} !
} !
(Vedere HelloLabel.java, SubmitLabelManipulationTask.java,
SubmitSwingProgram.java)
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Nozioni di base su Swing (3)
›  JButton: implementazione di un pulsante
import javax.swing.*;!
import java.awt.*;!
import static net.mindview.util.SwingConsole.*;!
!
public class Button1 extends JFrame {!
private JButton!
b1 = new JButton("Button 1"),!
Prima che un elemento sia
b2 = new JButton("Button 2");!
public Button1() {!
disposto sul JFrame viene
setLayout(new FlowLayout());!
assegnato un “gestore di layout”
add(b1);!
di tipo FlowLayout
add(b2);!
}!
public static void main(String[] args) {!
run(new Button1(), 200, 100);!
}!
}!
(Vedere Button1.java, Button2.java)
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Nozioni di base su Swing (4)
›  JTextField: implementa una singola riga di testo
DocumentListener myListener = ??;!
Le modifiche possono essere
monitorate aggiungendo
TextListener per TextEvents.
JTextField myArea = ??;!
myArea.getDocument().addDocumentListener(myListener);!
›  JTextArea: implementa un’area di testo multi-linea
DocumentListener myListener = ??;!
JTextArea myArea = ??;!
myArea.getDocument().addDocumentListener(myListener);!
In JTextComponent, le modifiche sono trasmesse dal
modello tramite un DocumentEvent verso un
DocumentListeners. Il DocumentEvent fornisce la
posizione della modifica e il tipo di cambiamento se
desiderato.
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
(Vedere Button2.java, TextArea.java)
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Nozioni di base su Swing (5)
›  La disposizione dei componenti è controllata mediante “layout
manager” che decidono come devono essere visualizzati i
componenti in base all’ordine in cui sono stati aggiunti - add()!
›  JApplet, JFrame, JWindws, JDialog, JPanel ecc. possono
contenere e visualizzare oggetti Component. In Container è presente
un metodo setLayout() che consente di scegliere un layout manager:
» 
» 
» 
» 
» 
BorderLayout!
FlowLayout!
GridLayout!
GridBagLayout!
BoxLayout!
»  ...
(Vedere BorderLayout1.java, FlowLayout1.java, GridLayout1.java)
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Modello a eventi di Swing (1)
›  Un componente può attivare un evento
(rappresentato da una classe separata)
›  L’evento è ricevuto da uno o più listener che agiscono
su di esso (rappresentato da una classe che
implementa un tipo di interfaccia listener)
›  Creare un oggetto listener e registrarlo con il
componente che sta attivando l’evento
add<TipoEvento>Listener();!
(Vedere ShowAddListeners.java)
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Tipi di eventi e di listener (1)
Tutti i componenti
Swing includono
metodi
addXXXLister() e
removeXXXListener()
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Tipi di eventi e di listener (2)
Tutti i componenti
Swing includono
metodi
addXXXLister() e
removeXXXListener()
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Componenti Swing
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche
Swing API reference
http://docs.oracle.com/javase/6/docs/technotes/guides/swing/reference.html
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento di Ingegneria e
Scienze dell’Informazione e Matematiche