Anteprima - Mauro Ennas LinkedIn

Introduzione alla
programmazione con linguaggio
Java
©2004 {Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Note di Copyright
Queste trasparenze (slide) sono coperte dalle leggi sul copyright. Testi grafica
e immagini in essa contenuti sono di proprietà dei rispettivi autori:
Dott.
Dott.ssa Emma Calabresu,
Calabresu, Dr. Maurizio Carta, Ing.
Ing. Mauro Ennas,
Ing.
Ing. Stefano Piras e Ing.
Ing. Fabrizio Saba.
Saba.
Tali slide possono essere duplicate e riprodotte dalle scuole di ogni ordine e
grado italiane o estere per applicazioni legate alla didattica e senza finalità
di lucro.
Ogni altra finalità o uso (ivi compresa la duplicazione su supporto magnetico, la
trasmissione, la memorizzazione e la stampa totale o parziale) è vietata senza
autorizzazione scritta da parte degli autori.
Gli autori non si assumono nessuna responsabilità sulle informazioni contenute in
queste slide che sono state realizzate per finalità meramente didattiche e sono
aggiornate alla data riportata in calce.
L’intestazione a piè pagina deve comunque non essere alterata e deve sempre
essere riportata anche in un utilizzo parziale del suddetto materiale.
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Indice del corso
•
•
•
•
•
•
•
Modulo
Modulo
Modulo
Modulo
Modulo
Modulo
Modulo
1:
2:
3:
4:
5:
6:
7:
Introduzione
Sintassi Java
Oggetti e Classi
Features
Eccezioni
GUI
Extra
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Modulo 6
GUI
©2004 {Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
In questo modulo
•
•
•
•
•
•
AWT e Swing
Container, componenti e gestori di layout
Il modello ad eventi
Ascoltatori e adattatori
Componenti e JFC
Esercitazione: progettare una GUI
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
AWT e Swing
Programmazione Java SDK 2.0
©2004 {Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
AWT e Swing
AWT package
• L’Abstract Windows Toolkit
funzionalità di base per le
(“Graphics User Interface”
componenti software riusabili
applet e applicazioni Java.
(AWT) fornisce le
interfacce grafiche
– GUI), tramite
e compatibili con
• Contiene classi che possono essere estese e le loro
proprietà ereditate
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
AWT e Swing
Containers e components
• Ci sono due tipi principali ci containers
– Windows (java.awt.Windows)
• Frame: finestra con titolo e angoli resize
• Dialog: finestra senza menu bar
– Panel (java.awt.Panel): è contenuto all’interno di un
altro container (ad esempio una Windows o una sua
sottoclasse), individua un’area rettangolare entro la
quale possono essere disposti altri componenti
• I containers possono contenere al loro interno altri
containers e non solo componenti! Ciò permette di
costruire interfacce complesse
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
AWT e Swing
Layout Manager
La posizione e la dimensione di un componente in un
container è determinata da un layout manager
– Il container prende un riferimento da una particolare
istanza del layout manager e quando ha bisogno di
posizionare un componente invoca il layout
manager che provvede a realizzare l’azione
desiderata (delegazione)
– Il layout manager ha controllo totale sui componenti
del container
– Il layout manager è responsabile del calcolo e della
definizione delle dimensioni standard in relazione alle
dimensioni attuali dello schermo
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
AWT e Swing
Principali Layout Manager
Il layout manager in un container viene gestito da un
layout manager che tipicamente viene associato per
default a ciascun container (come un Panel o un
Frame); i tipi principali di layout manager sono i
seguenti:
–
–
–
–
–
FlowLayout
BorderLayout
GridLayout
CardLayout
GridBagLayout
È possibile cambiare layout manager chiamando il
metodo “setLayout()”
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
AWT e Swing
Default Layout Manager
Component
Container
Windows
Frame
Dialog
Panel
Applet
FlowLayout
BorderLayout
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
AWT e Swing
FlowLayout
B1
B2
B3
• Default layout per i Panel
• I componenti si aggiungono da sinistra verso destra
• L’allineamento è centrato
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
AWT e Swing
FlowLayout: esempio
import
import java.awt.*;
java.awt.*;
public
class
public class EsempioDiFlowLayout
EsempioDiFlowLayout {{
private
private Frame
Frame myFrame;
myFrame;
private
Button
private Button myButtonA;
myButtonA;
private
private Button
Button myButtonB;
myButtonB;
public
void
esegui()
public void esegui() {{
myFrame = new Frame(“Questo è un esempio”);
myFrame = new Frame(“Questo è un esempio”);
myFrame.setLayout(new
myFrame.setLayout(new FlowLayout());
FlowLayout());
myButtonA
=
new
Button(“Funzione
myButtonA = new Button(“Funzione A”);
A”);
myButtonB
myButtonB == new
new Button(“Funzione
Button(“Funzione B”);
B”);
myFrame.add(myButtonA);
myFrame.add(myButtonA);
myFrame.add(myButtonB);
myFrame.add(myButtonB);
myFrame.pack();
myFrame.pack();
myFrame.setVisible(true);
myFrame.setVisible(true);
}}
public
public static
static void
void main
main (Strings
(Strings args[])
args[]) {{
EsempioDiFlowLayout
myFL
EsempioDiFlowLayout myFL == new
new EsempioDiFlowLayout();
EsempioDiFlowLayout();
myFL.esegui();
myFL.esegui();
}}
}}
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
AWT e Swing
BorderLayout
B1
B4
B5
B2
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
B3
AWT e Swing
GridLayout
B1
B2
B3
B4
B5
B6
• I componenti si aggiungono
da sinistra a destra, dall’alto
verso il basso
• Ogni regione viene dimensionata allo stesso modo
• Tramite
il
costruttore
si
specificano le righe e le colonne
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
AWT e Swing
GridBagLayout
B1
B2
B3
B4
B5
B6
B7
B8
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Il modello a eventi
Programmazione Java SDK 2.0
©2004 {Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Il modello a eventi
Eventi
• Gli eventi sono oggetti che descrivono cosa accade
• La sorgente di eventi (event source) è il generatore
di un evento
• Il manipolatore di eventi (event heandler) è il
metodo che riceve un oggetto evento, lo decifra, ed
elabora l’interazione con l’utente
Quando un utente compie un’azione sull’interfaccia
(preme un bottone o clicca il mouse), ciò causa un
evento che può essere gestito dal programma che lo
rileva
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Il modello a eventi
Event Handling
– Modello gerarchico (JDK 1.0)
• Basato sul meccanismo del contenitore e del contenuto
• Gli eventi sono da prima trasmessi al componente soggetto
dell’azione, e poi propagati nei contenitori secondo l’ordine
gerarchico
• Gli eventi che non vengono gestiti da un handler
automaticamente, continuano a propagarsi ai componenti del
container
– Modello a delega (JDK 1.1)
• Gli eventi sono gestiti dal componente a partire dal quale tale
evento è stato originato, ma consente a ciascun componente
di propagarlo verso una o più classi particolari chiamate
listener
• I listener contengono event headler in grado di ricevere ed
elaborare gli eventi
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Il modello a eventi
JDK 1.0 event model
– Vantaggi:
• Utilizza principi di programmazione propri dell’object oriented
– Si usa la calsse java.awt.Component
– Si realizza l’Override del metono headleEvent()
– Svantaggi:
• L’evento può essere gestito solo dal componente dal quale si
è originato o da un elemento gerarchico della catena
contenitore contenuto: ciò produce perdite di tempo )CPU
cycles)
• Per gestire l’evento si devono creare sottoclassi del
componente che riceve l’evento o creare un metodo alla base
del container (vertice gerarchia)
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Il modello a eventi
JDK 1.1 event model
– Vantaggi:
• Gli eventi vengono gestiti accidentalmente come accade nel
modello JDK 1.0 nel quale il contenitore può trovarsi a dover
gestire ciò che il contenuto non è riuscito a gestire
• Si possono costruire filtri (adapter) per classificare i tipi di
azioni
• Si crea una migliore distribuzione del lavoro di gestione degli
eventi su tutte le calssi
– Svantaggi:
• I due modelli visti non possono essere combinati fra loro
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Il modello a eventi
Esempio
import
import java.awt.*;
java.awt.*;
Import
Import java.awt.event.*;
java.awt.event.*;
public
class
public class TwoListener
TwoListener implements
implements MouseMotionListener,
MouseMotionListener, MouseListener
MouseListener {{
private
Frame
f;
private Frame f;
private
private TextField
TextField tf;
tf;
public void esegui() {
public void esegui() {
ff == new
new Frame(“Two
Frame(“Two listener
listener example”);
example”);
f.add(new Label(“Click and Drag the mouse”), BorderLayout.NORTH);
f.add(new Label(“Click and Drag the mouse”), BorderLayout.NORTH);
tf
tf == new
new TextField
TextField (30);
(30);
f.add(tf,
f.add(tf, BorderLayout.SHOUTH);
BorderLayout.SHOUTH);
f.addMouseMotionListener(this);
f.addMouseMotionListener(this);
f.setSize(300,200);
f.setSize(300,200);
f.setVisible(true);
f.setVisible(true);
}}
}}
//
// mouse
mouse listener
listener event
event
Public
Public void
void mouseDragged
mouseDragged (MouseEvent
(MouseEvent e)
e) {{
String
String s=“Mouse
s=“Mouse dragging:
dragging: X=“+e.getX()+”
X=“+e.getX()+” Y=“+e.getY();
Y=“+e.getY();
tf.setText(s);
tf.setText(s);
}}
Public void mouseEvent (MouseEvent e) {
Public void mouseEvent (MouseEvent e) {
String
String s=“The
s=“The mouse
mouse is
is left
left the
the building”;
building”;
tf.setText(s);
tf.setText(s);
}}
…… continua
continua ©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Il modello a eventi
Esempio
Segue
Segue ……
Puclic void mouseExited (mouseEvent e) {
Puclic void mouseExited (mouseEvent e) {
String
String s=“the
s=“the mouse
mouse is
is left
left the
the building”;
building”;
tf.setText(s);
tf.setText(s);
}}
//
//
Public void mouseMoved (MouseEvente e) {};
Public void mouseMoved (MouseEvente e) {};
//
// Unused
Unused MouseListener
MouseListener methods
methods
public
void
mousePressed
public void mousePressed (MouseEvent
(MouseEvent e)
e) {{ };
};
public
public void
void mouseClicked
mouseClicked (MouseEvent
(MouseEvent e)
e) {{ };
};
public
void
mouseReleased(MouseEvent
e)
{
};
public void mouseReleased(MouseEvent e) { };
//
// main
main
public
public static
static void
void main
main (( )) (String
(String args[
args[ ]] )) {{
TwoListen two = new TwoListen( );
TwoListen two = new TwoListen( );
two.esegui(
two.esegui( );
);
}}
}}
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Il modello a eventi
Adattatori (adaptor classes)
• Le classi di ascoltatori che definiamo possono estendere
le classi adapter e realizzare un override solo dei metodi
necessari
• In questo modo ci risparmiamo di indicare le interfacce
dei metodi non utilizzati
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Componenti e JFC
Programmazione Java SDK 2.0
©2004 {Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Componenti e JFC
Caratteristiche chiave delle JFC
• Le classi AWT vengono arricchite di nuovi componenti
che nel complesso costituiscono le JFC
• Le JFC sono componenti GUI e servizi che semplificano
drasticamente il progetto di interfacce grafiche
complesse e robuste
• JFC sono parte integrante di SDK 2 e sono costituite
principalmente da cinque API:
– AWT, Java 2D, Accessibility, Drag and Drop, Swing
• JFC contiene AWT (Swing estende AWT)
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Componenti e JFC
Caratteristiche chiave delle JFC
• AWT
– GUI tools in grado di soddisfare una larga parte delle applicazioni
Java
• Java 2D
– Fornisce un set di funzionalità avanzate per la grafica 2D e
l’elaborazione delle immagini
• Accessibility
– Mette a disposizione un set di tools avanzati per l’input output
non tradizionale (speech processing)
• Drag and Drop
– Permette l’intercomunicabilità tra applicazioni
applicazioni che non supportano java
java
e
• Swing
– Fornisce un ricco set di funzionalità per il progetto delle GUI
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
altre
Componenti e JFC
Componenti Swing
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Componenti e JFC
Componenti Swing
JLabel
JList
JCombobox
JScrollPane
JSlider
JOptionPane
JTable
JButton
JToggleButton
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Componenti e JFC
Swing
• Pluggable look and feel
– Le applicazioni appaiono indipendenti dalla piattaforma
– Sono disponibili componenti personalizzabili
• Architettura Swing
– Costruite attorno a API che implementano varie parti di
AWT
– Molte componeneti non utilizzano componenti Platformspecific come AWT (gestione dispositivi grafici)
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Componenti e JFC
Cos’è un’Applet
• Una classe Java che puo essere:
– Richiamate da una pagina HTML, scaricata ed eseguita da
un browser Web
– L’applet viene eseguita nell’ambiente di un Web browser, il
suo uso è legato al
•
•
•
•
Caricamento URL
Caricamento del documento HTML
Caricamento delle classi applet
Esecuzione dell’applet
Queste quattro fasi sono sequenziali ed effettuate a cura
del browser Web
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Componenti e JFC
Applet: sicurezza
• Molti browser sono in grado di prevenire
–
–
–
–
L’esecuzione di un altro programma
L’input-output su file
Chiamate a metodi nativi
Tentativi di apertura di socket su host diversi da quello sul
quale è in esecuzione l’applet corrente
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Componenti e JFC
Applet: metodi
• init()
– Inizializzazioni base per l’applet
• start()
– Viene chiamato quando l’applet diviene visibile
• stop()
– Viene chiamato quando l’applet diviene invisibile
• destroy()
– Utilizzato solo se devono rilasciarsi risorse specifiche (ad
esempio thread generati dall’applet)
• paint()
– Visualizza l’applet
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Componenti e JFC
Progettare una semplice GUI: fasi
• Stabilire le funzionalità
• Disegnare l’interfaccia utente
• Scegliere il layout manager appropriato
• Scegliere i componenti in base alle funzionalità (leggere
la documentazione)
• Implementare il modello ad eventi
• Testare il funzionamento
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
ESERCITAZIONE
Programmazione Java SDK 2.0
©2004 {Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Componenti e JFC
Progettare una semplice applicazione in Java
• Analisi dei requisiti
• Analisi dell’applicazione
– La GUI
• Event handling
– Strutturare le classi
• Eccezioni
• Streaming I/O
• Progetto e implementazione
• Testing
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Grazie per l’attenzione – Domande?
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }