interfacce ed eventi intercettare il mouse ed altri eventi



Documenti analoghi
Raffaella Brighi, a.a. 2005/06. Eventi e listener. Corso di Laboratorio II. A.A

INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE

Eventi e listener per i componenti grafici

Gestione degli eventi in Java

Gestione dell interattività: gli eventi

Interazioni col mondo: eventi

Eventi di azione. // con interfaccia per eventi di azione

Java Interfaccia Grafica

Gestione di eventi ed interfacce utente grafiche

Corso sul linguaggio Java

! Programmazione strutturata. ! OO: TDA, scambio messaggi, eredità, polimorfismo, OO in Java. ! Rassegna API. ! Documentazione Javadoc delle API

L interfaccia grafica in Java

Classi astratte. Master in Web Technology e Security luglio - settembre Interfacce

I Canvas. import java.awt.*; import javax.swing.*; public class Graf{ public Graf () { JFrame f = new JFrame("Finestra"); // crea frame invisibile

Ereditarietà e classi astratte

Laboratorio di IUM. Lezione 3. La gestione degli eventi. Di Blasi Gianpiero - D.M.I. - Università di Catania

Esercitazione n 4. Obiettivi

Corso Eclipse. Prerequisiti. 3 Window Builder

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Le basi della grafica in Java. Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Grafico della parabola

Progettazione : Design Pattern Creazionali

Java Applet. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

LPR 2005/ 2006 Lezione n.9. Elementi di grafica per lo svolgimento del progetto Double Buffering Caricamento delle immagini Gestione degli eventi

Tale attività non è descritta in questa dispensa

Sviluppo di Interfacce Grafiche in Java

La struttura dati ad albero binario

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

7.4 Estrazione di materiale dal web

L interfaccia grafica con Java

Come costruire una presentazione. PowerPoint 1. ! PowerPoint permette la realizzazione di presentazioni video ipertestuali, animate e multimediali

Programmazione in Java e gestione della grafica. Lezione 21

Modulo 4: Ereditarietà, interfacce e clonazione

GUIDA ALL INVIO DEI FILE COL TFR AD INPDAP

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

GUIDA AL PRONTUARIO MOBILE

WORD per WINDOWS95. Un word processor e` come una macchina da scrivere ma. con molte più funzioni. Il testo viene battuto sulla tastiera

Alessandro De Luca. Lezione, 13 maggio 2015

Java Interfaccia Grafica

Modulo 3 - Elaborazione Testi 3.5 Stampa unione

Android. Implementare una interfaccia utente

GUIDA UTENTE MONEY TRANSFER MANAGER

IMPOSTARE UNA MASCHERA CHE SI APRE AUTOMATICAMENTE

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Il controllo della visualizzazione

Gestione Risorse Umane Web

Tutorial KISSsoft: versione di prova e fasi iniziali

MANUALE PARCELLA FACILE PLUS INDICE

Guida all accesso al portale e ai servizi self service

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

MANUALE EDICOLA 04.05

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002

Infostat-UIF. Istruzioni per l accesso e le autorizzazioni

Angelo Gueli da Puntoedu.indire Corso sull uso delle Nuove Tecnologie 1

Introduzione all uso di Eclipse

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

MODELLO UNICO DI DOMANDA

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Multithreading in Java. Fondamenti di Sistemi Informativi

Guida di Keyboard Builder Sielco Sistemi Srl

ALICE PRATICHE EDILIZIE ON LINE MANUALE D'USO REL. 3.2

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

4. Un ambiente di sviluppo per Java

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Siti interattivi e dinamici. in poche pagine

Sistema Notifiche Penali

costruttori e distruttori

ShellExcel. Una domanda contiene i riferimenti (#A, #B, #C) alle celle che contengono i dati numerici del

LA GESTIONE DEI VEICOLI AZIENDALI CON MICROSOFT OUTLOOK

Guida rapida per i docenti all'uso della piattaforma di e-learning dell'istituto Giua

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

SIRTEL. Sistema Informativo per la Rendicontazione Telematica degli Enti Locali. Schema di funzionamento del processo per l Ente Locale

CONFIGURAZIONE E GESTIONE DEI DATABASE (rev. 1.1)

Introduzione. Macro macro istruzione. Sequenza di comandi memorizzati programma

PIANO DI TUTELA DELLE ACQUE DELLA SICILIA (di cui all'art. 121 del Decreto Legislativo 3 aprile 2006, n 152)

CAPITOLO 1 PREREQUISITI DI INSTALLAZIONE SOFTWARE RICAMBI CAPITOLO 2 PROCEDURA

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Modulo PCT Redattore atti per il Processo Telematico. Versione speciale per gli iscritti al Consiglio dell Ordine degli Avvocati di Roma

GUIDA DOCENTE ALL USO DELLA PIATTAFORMA EXCHANGE E-LEARNING - Lotus Quickr

Manuale Intesa. Guida all apertura di un ticket di assistenza online

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

Esercitazione sui Design Pattern

GUIDA DOCENTE ALL USO DELLA PIATTAFORMA EXCHANGE E-LEARNING - Lotus Quickr

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Guida all uso di Java Diagrammi ER

Registratori di Cassa

Telematica II 17. Esercitazione/Laboratorio 6

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

DENUNCE EDILCONNECT GUIDA COMPILAZIONE

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione a Oggetti Modulo B

Transcript:

interfacce ed eventi intercettare il mouse ed altri eventi

interfacce: premessa il termine "interfaccia" occorre in Java con due significati, collegati ma distinti 1. interface, parola chiave di Java e strumento di programmazione che viene introdotto in queste trasparenze 2. parte o totalità dell'interfaccia utente, detta anche GUI (Graphical User Interface) per costruire GUI occorre usare le interface 2

interfaccia Java elenco di metodi pubblici che il progettista di una classe può impegnarsi a realizzare (implementare) in caso di impegno è obbligatorio realizzare tutti i metodi previsti per ciascun metodo è definita la firma (signature) nome tipo restituito numero e tipo di parametri le interfacce possono essere usate come tipi (polimorfismo) 3

sintassi interfaccia public interface <nomeinterfaccia> { <firmadimetodo>; <firmadimetodo>; } non c è bisogno di premettere alla firme dei metodi lo specificatore di accesso, poiché tutti i metodi sono automaticamente public nelle API Java le interfacce sono elencate in corsivo 4

implementare un interfaccia una classe che implementa un interfaccia ne realizza tutti i metodi, rispettando le firme si dichiara l impegno a realizzare i metodi di un interfaccia scrivendo public class <nomec> implements <nomei> { } in caso di impegno non rispettato il compilatore segnalerà errore 5

esempio: l interfaccia shape consente il funzionamento dei metodi draw e fill di Graphics2D firma di draw: void draw(shape s) draw disegnerà qualunque istanza di una qualunque classe che implementi l interfaccia Shape le classi per oggetti grafici, come Rectangle2D.Double, Ellipse2D.Double, Line2D.Double e molte altre, implementano Shape situazione simile per fill 6

eventi azioni sulla tastiera, azioni con il mouse, generano eventi, ovvero fatti che potrebbero interessare il programma in esecuzione sono eventi relativi alla GUI esempio: ad ogni piccolo spostamento del mouse il gestore delle finestre invia una comunicazione al programma in esecuzione per notificare l evento (il piccolo spostamento) gli eventi notificati a un programma sono spesso centinaia o migliaia 7

eventi /2 per ogni tipologia interessante di evento esiste una classe Java corrispondente MouseEvent eventi relativi ad azioni svolte col mouse (movimento, pressione/rilascio tasti) ActionEvent eventi relativi ad azioni di più alto livello concettuale come pressione del tasto INVIO, clic su un pulsante ecc. WindowEvent eventi relativi alle finestre come iconizzazione, chiusura, attivazione, apertura ecc. 8

eventi /3 9 i programmi non ascoltano le notifiche di eventi, a meno che non abbiano installati appositi ricevitori (listener) ogni ricevitore è istanza di una classe che deve implementare una specifica interfaccia, che dipende dalla natura dell evento le interfacce sono predefinite, mentre l implementazione dei metodi è a carico del programmatore tali metodi specificano il comportamento del programma alla ricezione dell evento l installazione di un ricevitore viene fatta esplicitamente tramite un apposita chiamata

ricevere eventi /1 1. occorre in pratica identificare tre ingredienti a) l origine dell evento dove può verificarsi l evento? ad es., in un applet, in un campo di testo, su un pulsante, su un menu ecc. b) l interfaccia che deve essere implementata dalla classe che istanzia i ricevitori per l evento dipende dalla natura dell evento (segue tabella estratta dal tutorial di Java) va importata (java.awt.event.<interfaccia>) c) la classe evento dipende dalla natura dell evento va importata (java.awt.event.<classeevento>) 10

tabella interfacce 11 Act that results in the event User clicks a button, presses Return while typing in a text field, or chooses a menu item User closes a frame (main window) User presses a mouse button while the cursor is over a component User moves the mouse over a component Component becomes visible Component gets the keyboard focus Table or list selection changes Listener type ActionListener WindowListener MouseListener MouseMotionListener ComponentListener FocusListener ListSelectionListener

ricevere eventi /2 2. definire la classe che implementa l interfaccia identificata a) prendere atto di quali sono i metodi da implementare (imposti dall interfaccia) b) capirne il significato (ogni metodo descrive il comportamento del programma in corrispondenza di uno specifico evento) c) implementare i metodi, sfruttando eventualmente la classe evento individuata i metodi di MouseEvent getx() e gety() consentono di ottenere le coordinate di pixel del punto in cui si è verificato l evento 12

ricevere eventi /3 3. istanziare ed installare un oggetto ricevitore <nomeclassericevitore> listener = new <nomeclassericevitore>(); addmouselistener(listener); oppure addactionlistener(listener); (o altre tipologie) tale codice va inserito in fase di inizializzazione della componente (applet) 13

interfaccia MouseListener 14 1. void mousepressed(mouseevent event); chiamato quando un pulsante del mouse viene premuto su un componente (applet) 2. void mousereleased(mouseevent event); chiamato quando un pulsante del mouse viene rilasciato su un componente (applet) 3. void mouseclicked(mouseevent event); chiamato quando un pulsante del mouse è stato premuto e rilasciato i rtapida successione su un componente (applet) 4. void mouseentered(mouseevent event); chiamato quando il mouse entra in un componente (applet) 5. void mouseexited(mouseevent event); chiamato quando il mouse esce da un componente (applet)

esempio: intercettare i clic del mouse su un applet origine evento: applet MouseSpyApplet interfaccia da implementare: MouseListener classe evento rilevante: MouseEvent classe da realizzare, che implementa MouseListener: MouseSpy 15

classe MouseSpy 16 public class MouseSpy implements MouseListener { public void mouseclicked(mouseevent event) { System.out.println("Mouse clicked. x = " + event.getx() + " y = " + event.gety()); } public void mouseentered(mouseevent event) { System.out.println("Mouse entered. x = " + event.getx() + " y = " + event.gety()); } public void mouseexited(mouseevent event) { System.out.println("Mouse exited. x = " + event.getx() + " y = " + event.gety()); } public void mousepressed(mouseevent event) { System.out.println("Mouse pressed. x = " + event.getx() + " y = " + event.gety()); } public void mousereleased(mouseevent event) { System.out.println("Mouse released. x = " + event.getx() + " y = " + event.gety()); }}

applet MouseSpyApplet import java.applet.applet; import java.awt.event.mouseevent; import java.awt.event.mouselistener; public class MouseSpyApplet extends Applet { public void init() { MouseSpy listener = new MouseSpy(); addmouselistener(listener); } } run 17

interfaccia ActionListener 1. void actionperformed(actionevent e) chiamato quando si verifica un'azione (alcune) azioni interessanti: l'utente preme un pulsante sulla GUI (Graphic User Interface) l'utente preme il tasto INVIO su un campo di testo 18

classe java.awt.textfield 19 consente di istanziare campi di testo, ovvero componenti rettangolari in cui è possibile leggere/scrivere una linea di testo costruzione: new TextField(int columns) altri costruttori disponibili inserimento in una finestra applet: add(<riferimentoistanzatf>) metodi interessanti public void settext(string t) specifica il nuovo contenuto del campo di testo public String gettext() restituisce il contenuto del campo di testo

esempio: intercettare l'input in un campo di testo applet IntercettaTF: visualizza, tramite drawstring, la stringa specificata dall'utente nel campo di testo origine evento: il campo di testo interfaccia da implementare: ActionListener classe evento rilevante: ActionEvent classe da realizzare, che implementa ActionListener: TFListener 20

classe IntercettaTF public class IntercettaTF extends Applet { private final int LARGH = 12; private TextField campotesto; private String text = ""; private TFListener listener; public void init() { campotesto = new TextField(LARGH); add(campotesto); listener = new TFListener(); campotesto.addactionlistener(listener); } 21 } public void paint(graphics g) { g.drawstring(text, 50, 160 ); }

classe TFListener /1 public class TFListener implements ActionListener { public void actionperformed(actionevent e) { /* azioni da svolgere: 1. acquisisce con gettext il testo 2. memorizza testo in var. text 3. "pulisce" campo di testo */ } } 22

classe TFListener /2 problema: per acquisire il testo, e memorizzarlo nella variabile text, occorre scrivere text = campotesto.gettext(), ma le variabili text e campotesto sono risorse private interne alla classe IntercettaTF la classe TFListener non può utilizzare tali variabili soluzione: utilizzo di classi interne 23

classi interne /1 classi specificate all'interno di un'altra classe schema: public class ClasseEsterna { } private class ClasseInterna { } 24

classi interne /2 una classe interna è una classe che ha la particolarità di poter accedere alle variabili istanza definite nella classe che la contiene conserva le altre caratteristiche di una classe la classe che la contiene può istanziare oggetti della classe interna per le altri classi la possibilità dipende dallo specificatore di accesso public o private 25

classe TFListener /3 rendiamo TFListener classe interna di IntercettaTF public class IntercettaTF extends Applet { private class TFListener implements ActionListener { } } 26

classe TFListener /4 private class TFListener implements ActionListener { } public void actionperformed (ActionEvent e) { } text = campotesto.gettext(); campotesto.settext(""); 27

applet intera composta di un solo file (IntercettaTF.java), oltre al file HTML funziona correttamente? proviamo l'esecuzione non "ridisegna" quando necessario 28

metodo repaint() la chiamata repaint() chiede al gestore delle finestre di chiamare il metodo paint non appena possibile di norma va inserita all'interno del metodo che serve un evento in seguito a cui può essere opportuno ridisegnare 29

classe TFListener /5 private class TFListener implements ActionListener { public void actionperformed (ActionEvent e) { text = campotesto.gettext(); campotesto.settext(""); // ridisegna, appena possibile repaint(); } } 30

intercettare la pressione dei tasti in un campo di testo origine evento: campo di testo interfaccia da implementare: KeyListener classe evento rilevante: KeyEvent 31

interfaccia KeyListener 1. void keypressed(keyevent e) chiamato quando viene premuto un tasto 2. void keyreleased(keyevent e) chiamato quando viene rilasciato un tasto 3. void keytyped(keyevent e) chiamato quando viene premuto e rilasciato un tasto 32

altre interfacce utili WindowListener classe evento rilevante: WindowEvent prevede sette metodi void: windowactivated, windowclosed, windowclosing, windowdeactivated, windowdeiconified, windowiconified, windowopened, tutti con parametro WindowEvent MouseMotionListener classe evento rilevante: MouseEvent prevede due metodi void: mousedragged, mousemoved, tutti con parametro di tipo MouseEvent 33

classi "adapter" per ogni interfaccia XXXListener con più di un metodo esiste una classe predefinita XXXAdapter che la implementa, in cui tutti i metodi previsti sono vuoti invece di implementare XXXListener si può dunque estendere XXXAdapter, sovrascrivendo solo i metodi di interesse l'utilità consiste nel non dover implementare esplicitamente tutti i metodi previsti dall'interfaccia quando interessano solo alcuni/pochi degli eventi trattati dall'interfaccia 34

metodo getsource definito per tutte le classi evento public Object getsource() restituisce l'oggetto su cui si è verificato l'evento utile quando si associa lo stesso oggetto ricevitore a più componenti 35

esempio: applet per il trascinamento di un uovo applet EggDrag: trascina un uovo, guidato dal movimento del mouse origine eventi: l'applet interfacce da implementare: MouseListener (metodo mousepressed) e MouseMotionListener (mousedragged) classe evento rilevante: MouseEvent classe intercettatrice da realizzare, che implementa MouseListener e MouseMotionListener: MyMouseMotionListener 36