Java SE 6 Programmazione grafica (3) diegozabot@yahoo.it ursula.castaldo@gmail.com
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.
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" 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)