Programmazione Java: Interfacce grafiche (GUI) romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp
( 1 ) (GUI) Interfacce grafiche 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
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
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/
Nozioni di base su Swing (1) JFrame: modulo (form) che crea una finestra in modo indipendente dal sistema operativo import javax.swing.*;! public class HelloSwing {! }! public static void main(string[] args) {! }! JFrame frame = new JFrame("Hello Swing");! frame.setdefaultcloseoperation(jframe.exit_on_close);! frame.setsize(300, 100);! frame.setvisible(true);! Rende la finestra visibile Indica come chiudere la finestra (pulsante o tastiera) Indica di chiudere definitivamente il programma
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)
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"),! b2 = new JButton("Button 2");! public Button1() {! setlayout(new FlowLayout());! add(b1);! add(b2);! }! public static void main(string[] args) {! run(new Button1(), 200, 100);! }! Prima che un elemento sia disposto sul JFrame viene assegnato un gestore di layout di tipo FlowLayout (Vedere Button1.java, Button2.java)
Nozioni di base su Swing (4) JTextField: implementa una singola riga di testo Le modifiche possono essere DocumentListener mylistener =??;! monitorate aggiungendo JTextField myarea =??;! TextListener per TextEvents. 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. (Vedere Button2.java, TextArea.java)
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)
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)
Tipi di eventi e di listener (1) Tutti i componenti Swing includono metodi addxxxlister() e removexxxlistener()
Tipi di eventi e di listener (2) Tutti i componenti Swing includono metodi addxxxlister() e removexxxlistener()
Componenti Swing
Swing API reference http://docs.oracle.com/javase/6/docs/technotes/guides/swing/reference.html