Programmazione grafica (3)

Transcript

Programmazione grafica (3)
Java SE 6
Programmazione grafica (3)
[email protected]
[email protected]
Event Listeners (1)
Se vogliamo che una classe risponda a degli eventi utente, deve
implementare l'interfaccia che si occupa di questi eventi.
Queste interfacce sono chiamate event listeners.
Ogni listener gestisce un tipo di evento specifico.
Il package java.awt.event contiene tutti gli event listener di
base, così come gli oggetti che rappresentano gli eventi
specifici.
Event Listeners (2)
ActionListener -> Eventi "azione", generati generalmente da
un'azione su un componente da parte dell'utente (es click su un
pulsante)
FocusListener -> Eventi sul focus della tastiera, generati
quando un componente come un campo di testo ottiene o perde
il focus
KeyListener -> Eventi della tastiera, generati quando un
utente scrive con la tastiera
MouseListener -> Eventi del mouse, generati dal click del
mouse, dall'entrata e dall'uscita del mouse dall'area di un
componente
WindowListener -> Eventi della finestra, generati quando si
massimizza, minimizza, muove o chiude una finestra.
Event Listeners (3)
1. IMPOSTAZIONE DEL TIPO DI EVENTO
Una classe può implementare tanti listeners quanti ne ha
bisogno. Per implementare uno o più listeners si utilizza la
parola chiave implements
public class Classe extends JFrame implements ActionListener {
// ...
}
Per implementare più di un listener basta elencarli separati da virgola,
dopo "implements"
Per utilizzare queste classi nei programmi si utilizza:
import java.awt.event.*;
Event Listeners (4)
2. IMPOSTAZIONE DEI COMPONENTI
Una volta dichiarata l'implementazione di un listener, bisogna
aggiungere un listener corrispondente al componente che si
vuole mettere in ascolto (di un evento).
Dopo aver creato il componente, gli si può associare uno dei
seguenti metodi:
● addActionListener() - JButton, JTextField
● addFocusListener() - tutti i componenti Swing
● addKeyListener() - tutti i componenti Swing
● addMouseListener() - tutti i componenti Swing
● addMouseMotionListener() - tutti i componenti Swing
● addTextListener() - JTextField e JTextArea
● addWindowListener() - JFrame
Event Listener (5)
Esempio
JButton btn = new JButton("Pulsante");
btn.addActionEventListener(this);
Tutti i metodi per l'aggiunta di un listener prendono un
argomento: l'oggetto che sta ascoltando il tipo di evento
specificato dal listener.
Utilizzare this significa che la classe corrente è l'event listener.
Event Listeners (6)
3. METODI PER LA GESTIONE DEGLI EVENTI
Una volta che un'interfaccia viene associata a una classe, la
classe deve gestire tutti i metodi contenuti nell'interfaccia.
L'interfaccia ActionListener ha un solo metodo:
actionPerformed()
Tutte le classi che implementano ActionListener devono avere
un metodo con la seguente struttura:
public void actionPerformed(ActionEvent event) {
// qui gestisco l'evento
}
Event Listeners (7)
Se un solo componente nell'interfaccia grafica del programma
ha un listener per gli action events, allora si sa che il metodo
actionPerformed() verrà invocato solo in risposta a un evento
generato da quel componente.
Ma se ci sono più componenti che utilizzano un action event
listener, allora si utilizza l'oggetto ActionEvent per sapere quale
componente ha generato l'evento.
Il metodo getSource() dell'oggetto può essere usato per
determinare il componente che ha generato l'evento
Object sorgente = event.getSource();
L'oggetto restituito da getSource può venir confrontato con i
componenti tramite l'operatore ==
Event Listeners (8)
Esempio
Object sorgente = event.getSource();
if (sorgente == btnEsci) { // .... }
Confronto con un oggetto di nome btnEsci.
S09Eventi
Creare un programma con 3 pulsanti e far visualizzare tramite
una finestra di dialogo qual è il pulsante che si è premuto.
S10CambiaTitolo
Creare un programma con due pulsanti: "Titolo rosso" e "Titolo
verde".
Quando si clicca su uno dei due pulsanti, cambia il titolo della
finestra in "Finestra Rossa" e "Finestra Verde" rispettivamente.
NOTE
● Per cambiare il titolo della finestra, si usa il metodo setTitle
(String)
Window Events
Gli eventi legati alle finestre avvengono quando un utente apre o
chiude un oggetto finestra (es. JFrame). Qualsiasi componente può
generare questi eventi, che vengono supportati se la classe implementa
l'interfaccia WindowListener
Ci sono 7 metodi che vanno implementati:
● windowActivated(WindowEvent)
● windowClosed(WindowEvent)
● windowClosing(WindowEvent)
● windowDeactivated(WindowEvent)
● windowDeiconified(WindowEvent)
● windowIconified(WindowEvent)
● windowOpened(WindowEvent)
Hanno tutti la stessa forma:
public void windowOpened(WindowEvent evt) { }
All'oggetto di tipo JFrame devo aggiungere il
metodo addWindowListener
S11GestFinestre
Creare un programma S11GestFinestre che mostri un messaggio
quando la finestra viene aperta, chiusa, ridotta a icona e
ripristinata.
Mouse Events (1)
Gli eventi legati al Mouse vengono generati dai seguenti tipi di
interazione utente:
● click del mouse
● l'entrata del mouse nell'area di un componente
● l'uscita del mouse dall'area di un componente
L'interfaccia MouseListener ha i seguenti metodi
● mouseClicked(MouseEvent)
● mouseEntered(MouseEvent)
● mouseExited(MouseEvent)
● mousePressed(MouseEvent)
● mouseReleased(MouseEvent)
Ognuno di questi metodi prende la forma base:
public void mouseReleased(MouseEvent event) {
Mouse Events (2)
L'oggetto MouseEvent ha i seguenti metodi:
● getClickCount() - restituisce il numero di volte (inter0) che
il mouse è stato cliccato
● getPoint() - restituisce le coordinate x,y (oggetto Point)
all'interno del componente dove il mouse è stato cliccato
● getX() - restituisce la posizione x
● getY() - restituisce la posizione y
S12GestMouse
Realizzare un programma S12GestMouse che faccia cambiare il
testo di una JLabel quando ci si passa sopra con il mouse.
Visualizzare anche le coordinate del mouse quando si clicca
sopra l'oggetto JLabel.
Provare a modificare il programma, creando due JLabel:
- la prima sarà sensibile al passaggio del mouse
- la secondo sarà sensibile al click
FocusEvent
Gli eventi del focus si verificano quando un componente ottiene
o perde il focus dell'input su un'interfaccia grafica.
Il focus descrive il componente che è attivo per l'inserimento di
dati da tastiera, e si applica a tutti i componenti che possono
ricevere un input (viene evidenziato dal cursore che lampeggia
nei JTextField e nelle JTextArea, o da un contorno puntinato su
un JButton.
A un componente può essere dato il focus tramite il metodo
requestFocus()
L'interfaccia FocusListener ha due metodi:
● public void focusGained(FocusEvent event) {}
● public void focusLost(FocusEvent event) {}
Per determinare quale oggetto ha ottenuto o perso il focus, si
S13GestFocus
Realizzare un programma con due JTextField e due rispettive
JLabel . Le JLabel segnalano se il campo di testo associato ha il
focus.
Quando si passa da un campo di testo all'altro, le etichette
devono cambiare in relazione al passaggio (l'etichetta del
campo di testo che ha il focus segna "FOCUS", l'altra "NO
FOCUS")
Key Events
Gli eventi di tipo Key si verificano quando un tasto viene
premuto sulla tastiera.
L'interfaccia KeyListener prevede 3 metodi:
● keyPressed(KeyEvent)
● keyReleased(KeyEvent)
● keyTyped(KeyEvent)
Hanno la seguente struttura:
public void keyPressed(KeyEvent event) {}
Il metodo getKeyChar() di KeyEvent restituisce il carattere del
tasto associato con l'evento.
S14GestKey
Il programma contiene solo un oggetto JTextField in una
finestra. Quando si scrive un carattere nel campo di testo, una
finestra di dialogo di tipo MessageDialog visualizza il carattere
inserito nel campo di testo tramite il metodo getKeyChar() di
KeyEvent.
S15Eventi
Creare un programma che crei una finestra con i seguenti campi:
● Nome (JTextField)
● Cognome (JTextField)
● Indirizzo (JTextField)
● Anno di nascita (JTextField)
e due pulsanti
● INVIA (invia di dati)
● CANCELLA (pulisce il modulo)
Creare la seguente gestione di eventi
● chiusura finestra: avvisa che si sta chiudendo la finestra con un messaggio di
saluti
● controlla che il contenuto di "Anno di nascita" sia un numero intero
compreso fra 1900 e 2000
● quando si passa sopra al pulsante INVIA viene visualizzato un testo (tramite
una JLabel) che dice che verranno inviati i dati inseriti, e quando si passa
sopra al pulsante CANCELLA segnala nella stessa JLabel che i dati verranno
cancellati
● quando si preme INVIA viene visualizzata una MessageDialog che mostra
tutti i dati inseriti
● quando si preme CANCELLA tutti i campi di testo vengono "puliti"