Interazioni col mondo: eventi

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

Gestione degli eventi in Java

INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE

L interfaccia grafica in Java

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

Corso sul linguaggio Java

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

L interfaccia grafica con Java

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

Introduzione al package grafico Swing

interfacce ed eventi intercettare il mouse ed altri eventi

Swing. Swing 1. Java e la grafica Java permette di realizzare agevolmente applicazioni grafiche Package java.awt

Sviluppo di Interfacce Grafiche in Java

Alessandro De Luca. Lezione, 13 maggio 2015

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

Algoritmi di Ricerca. Esempi di programmi Java

Gestione dell interattività: gli eventi

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

Java Interfaccia Grafica

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Programmazione Java: Interfacce grafiche (GUI)

Corso Eclipse. Prerequisiti. 3 Window Builder

Java: Compilatore e Interprete

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented 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

Grafico della parabola

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

Archivio CD. Fondamenti di Programmazione

Progettazione : Design Pattern Creazionali

Esercitazione n 6. Capacità di analisi e di estensione di progetti Componenti grafici e gestione di eventi Linguaggio Java:

Gestione di eventi ed interfacce utente grafiche

GESTIONE DEI PROCESSI

8. GUI : Graphics User Interface

Eventi e listener per i componenti grafici

Scope e visibilità per classi

SharePoints è attualmente disponibile in Inglese, Italiano e Francese.

Esercizio 1: trading on-line

Esercizi della lezione 5 di Java

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Introduzione (Swing vs AWT)

Università degli Studi di Napoli Parthenope Facoltà di Scienze e Tecnologie Corso di Laurea in Informatica Generale

Java Virtual Machine

MAGAZZINO FISCALE (agg. alla rel )

Introduzione a Classi e Oggetti

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:

Progettazione e Sviluppo di Interfacce Grafiche con Java Swing

Inizializzazione, Assegnamento e Distruzione di Classi

Parola chiave extends

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

Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A

Programmazione Orientata agli Oggetti in Linguaggio Java

Ottava Esercitazione. introduzione ai thread java mutua esclusione

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Un esercizio d esame. Flavio De Paoli

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

Funzioni in C. Violetta Lonati

L applicazione di MVC alla simulazione di ascensore I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE II 1

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

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

Mac Application Manager 1.3 (SOLO PER TIGER)

23 - Graphical User Interface GUI (Cenni)

Concetto di Funzione e Procedura METODI in Java

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT.

Registri RMI. Massimo Merro Univ. Verona Programmazione di Rete 90 / 247

Esercitazione di Basi di Dati

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

Riassunto. GUI in Java con l AWT 1. Oggi: GUI in Java, l AWT. Oggi. GUI in Java. Cos è una GUI. Stefano Mizzaro 1

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Programmazione in Java e gestione della grafica. Lezione 21

FPf per Windows 3.1. Guida all uso

Modulo 4: Ereditarietà, interfacce e clonazione

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Gestione Turni. Introduzione

Esercitazione n 4. Obiettivi

Il calendario di Windows Vista

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

Riassunto. GUI in Java con l AWT 1. Cos è una GUI. Oggi: GUI in Java, l AWT. GUI in Java. Un esempio. Stefano Mizzaro 1

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

LE CARATTERISTICHE DEI PRODOTTI MULTIVARIANTE

Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Database 1 biblioteca universitaria. Testo del quesito

Soluzione dell esercizio del 2 Febbraio 2004

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

Tale attività non è descritta in questa dispensa

10 - Programmare con gli Array

Guida. Macchina Scratch

Prova di Laboratorio di Programmazione

appunti delle lezioni Architetture client/server: applicazioni server

SCARICO DATI ONETOUCH Verio per EuroTouch Home GUIDA ALL USO

Transcript:

Interazioni col mondo: eventi Le interazioni di una GUI con il mondo esterno sono segnalate tramite eventi: click del mouse, inserimento di testo, selezione/attivazione... Gli eventi che memorizzano queste informazioni sono oggetti e discendono dalla classe AWTEvent lang.object util.eventobject awt.awtevent MouseEvent ActionEvent ItemEvent AdjustmentEvent ComponentEvent KeyEvent InputEvent PaintEvent WindowEvent ContainerEvent

Interazioni col mondo: eventi Gli oggetti rilevanti per un evento sono: L evento stesso (che è un oggetto; per esempio potrà essere un istanza di ActionEvent) La sorgente dell evento (un componente GUI) Il destinatario dell evento: un oggetto listener (= ascoltatore, o percettore) dell evento Un ascoltatore attende il verificarsi di certe tipologie di eventi (anche più d uno) e prevede un metodo da eseguire se capitano Va: definito, creato e associato a una sorgente.

Interazioni col mondo: eventi Solitamente le classi di eventi sono XyzEvent e gli ascoltatori sono istanze di XyzListener. Le listener sono interfacce tipicamente definite in java.awt.event, java.awt.beans e javax.swing.event. Eventi e ascoltatori sono più generali che non relativi alle sole GUI. Quindi EventObject e EventListener, basi delle gerarchie, sono in java.util invece che awt o swing. Le listener sono interfacce, quindi vanno implementate in una classe concreta.

Interazioni col mondo: eventi Le classi che creano eventi hanno anche metodi add/removexyzlistener() per associare quell evento a un listener. Le interfacce listener hanno un metodo con parametro evento che dice cosa fare se capita. Per sapere l oggetto che ha generato l evento esiste il metodo generale getsource. Ci sono metodi più specifici, ma non sono omogenei (esempio: ActionEvent ha il metodo getactioncommand, di tipo String)

Interazioni col mondo: eventi La classificazione di eventi, loro possibili lanciatori e possibili ascoltatori è complessa. Alcuni esempi: Evento Listener Metodo Lanciatore ActionEvent ActionListener actionperformed JButton, JMenuItem JList, JTextField MouseEvent MouseListener mouse-: Clicked, Entered, Exited, Pressed, Released JComponent MouseMotion Listener mouse-: Dragged, Moved WindowEvent WindowListener window-: Closing, Closed, Activated JWindow

Interazioni col mondo: eventi Evento Listener Metodo Lanciatore ComponentEvent ContainerEvent Component Listener Container Listener component-: Resized, Moved, Hidden, Shown componentadded, componentremoved KeyEvent KeyListener key-: Pressed, Released, Typed JComponent JContainer JComponent ItemEvent ItemListener itemstatechanged JCheckbox, JChoice, JList La corrispondenza non è univoca: più oggetti possono lanciare lo stesso evento, e uno stesso evento (vedi MouseEvent) può avere più listener.

Gestione degli eventi Per gestire un evento occorre: collegare al componente che lo genera uno o più percettori degli eventi di tipo opportuno implementare un gestore degli eventi (non necessariamente distinto) per ogni percettore Un gestore degli eventi (event handler) è un metodo che viene automaticamente invocato dal listener come reazione all evento. Ogni interfaccia listener specifica uno o più handler, che devono essere definiti nella classe che implementa il listener

Gestione degli eventi Un esempio classico è un bottone da premere. Il lanciatore di eventi è un istanza di JButton. L evento innescato è istanza di ActionEvent. L ascoltatore è un istanza di ActionListener. Il metodo invocato è actionperformed.

Gestione degli eventi Quando il bottone viene premuto: la JVM genera un evento di tipo ActionEvent per ogni oggetto che sia stato posti come ascoltatore dell evento, esegue il suo metodo actionperformed (lo ha poiché implementa ActionListener), con l evento come parametro. Proviamo a implementare il contatore...

Esempio: clicca bottone import javax.swing.*; import java.awt.event.*; class Ascoltatore implements ActionListener { private CliccaBott cb; public Ascoltatore(CliccaBott cb) { this.cb = cb; } public void actionperformed(actionevent e) { cb.conteggia(); } } public class CliccaBott extends JFrame { public CliccaBott() {... } public void inizializzagui {... } public void conteggia() {... } public static void main(string[] args) { new CliccaBott(); } }

Esempio: clicca bottone public class CliccaBott extends JFrame { private JButton ilbottone; private JLabel etic; private int contatore; public CliccaBott() { super(); this.contatore=0;... this.setvisible(true); } private void inizializzagui() { ilbottone = new JButton("Clicca qua!"); etic = new JLabel("Pronto per cliccare?"); //aggiungi etic e ilbottone al pannello etc. ActionListener asc = new Ascoltatore(this); ilbottone.addactionlistener(asc); } public void conteggia() { contatore++; etic.settext("hai fatto "+contatore+ click"); }

Innesco di eventi Le classi che innescano un evento XyzEvent di solito hanno a disposizione metodi protetti firexyz() che creano un oggetto evento Xyz e lo notificano ai rispettivi ascoltatori. Gli eventi possono essere percepiti da più listener Ogni listener ascoltare quante sorgenti vuole Le istanze di JComponent (o sottoclassi) mantengono un array EventListenerList (non è una hash table!) i cui elementi sono coppie (XyzListener.class, unxyzlistener) ovvero: (classe, nome dell istanza)

Innesco di eventi Aggiunte/rimozioni da EventListenerList implicano la creazione di un nuovo array mediante il metodo System.arrayCopy() L array è più veloce di un tipo Collection, poiché la lista va scandita ad ogni evento Quando si trova una classe compatibile, si notifica l evento all istanza (l elemento subito dopo) Per coerenza tra thread multipli, i metodi di aggiunta/rimozione da EventListenerList sincronizzano l accesso all array

Gestione di più sorgenti Si possono gestire due sorgenti di eventi: o definendo un ascoltatore per ognuna di esse o definendo un singolo ascoltatore. Questi però dovrà distinguere tra gli eventi di una e dell altra. Per farlo, userà il metodo getsource sull evento. public void actionperformed(actionevent e) { if (e.getsource() == bottoneuno) { //fa qualcosa } else if (e.getsource() == bottonedue) { //fa qualcos altro} else... }

Esercizi suggeriti Creare contatori a più bottoni. Creare convertitori (per esempio da gradi Celsius a Fahrenheit, da dollari a euro, da metri a yarde, etc.): vanno usate una o più caselle di testo (TextField) dove l utente inserisce input

Temporizzatori Nel package javax.swing esiste una classe Timer che serve a generare una sequenza di eventi a intervalli fissati, che vengono passati a un ascoltatore designato. ActionListener asc =... ; int deltat = 1000; Timer t = new Timer(deltaT, asc); t.start(); fa partire un nuovo thread Si possono generare animazioni in millisecondi Esercizio: creare un display di un orologio.

Temporizzatori C è una classe Timer un po più generale nel package java.util. Quella di javax.swing è più indicata per le applicazioni grafiche leggere perché usa un thread condiviso. Attenzione: l ascoltatore associato lancerà dei metodi actionperformed per fare qualcosa. Questi vengono eseguiti in un altro thread (worker thread) rispetto a quello che lancia gli eventi Il worker thread deve essere leggero o la GUI diventa poco reattiva.

Gli eventi del mouse Qualunque JComponent può farsi ascoltare da MouseListener e MouseMotionListener Per ascoltare pulsanti e movimenti del mouse Sono due interfacce che vanno implementate. MouseListener ha mouseclicked, -Entered, -Exited, -Pressed, -Released MouseMotionListener ha mousedragged, mousemoved Di solito non si vuole però implementarli tutti, ma solo uno o due.

Gli eventi del mouse Pertanto Java mette a disposizione le classi MouseAdapter e MouseMotionAdapter Hanno un implementazione concreta di tutti quei metodi (i primi cinque e i secondi due) L implementazione è non fare alcuna azione In questo modo, un ascoltatore del mouse può essere definito come estensione di queste classi adattatrici. A questo punto si può fare ovverride solo dei metodi che devono fare qualcosa di specifico.