listener

8
Listener Listener Lezione sui listener e le Lezione sui listener e le classi interne classi interne dicembre 2008 dicembre 2008 Prof. Silvano Natalizi Prof. Silvano Natalizi

Upload: silvano-natalizi-itis-alessandro-volta-perugia

Post on 08-Jun-2015

877 views

Category:

Education


0 download

DESCRIPTION

come collegare due metodi actionperformed a due bottoni

TRANSCRIPT

Page 1: Listener

ListenerListener

Lezione sui listener e le classi interneLezione sui listener e le classi interne

dicembre 2008dicembre 2008

Prof. Silvano NataliziProf. Silvano Natalizi

Page 2: Listener

Collegare due diversi bottoni – Collegare due diversi bottoni – prima opzioneprima opzione

Implementare due metodi actionPerformed()Implementare due metodi actionPerformed() Class MioDisegno implements ActionListener { Class MioDisegno implements ActionListener {

// codice// codice Public void actionPerformed(ActionEvent event) {Public void actionPerformed(ActionEvent event) {

frame.repaint();frame.repaint(); }} Public void actionPerformed(ActionEvent event) {Public void actionPerformed(ActionEvent event) {

label.setTxt(“salute!”);label.setTxt(“salute!”); }}

Ma questo è impossibile, non si può scrivere il medesimo metodo due volte. Il programma non si compila, inoltre come si fà a sapere quale dei due

metodi richiamare ?

Page 3: Listener

Registra il medesimo listener con Registra il medesimo listener con entrambi i bottonentrambi i botton

La cosa funzione, ma abbiamo un metodo che fa diverse cose, anziché una sola. Questo non è bene, perché un metodo deve svolgere un solo compito!

Page 4: Listener

Creare due diverse classi Creare due diverse classi ActionListener – terza opzioneActionListener – terza opzione

Il problema è che le classi listener non hanno accesso alle variabili della classe MioDisegno. Si può risolvere il problema creando i metodi getter, ma non è una

soluzione gradevole.

Page 5: Listener

Soluzione ottimaleSoluzione ottimale

Sarebbe bello! Se le due differenti classi listener.potessero accedere alle variabili d’istanza della principale classe della

grafica!!.Se queste classi quasi

potessero appartenere alla classe principale, allora

avremmo il meglio del mondo. Sarebbe un sogno, ma è solo

una fantasia…

Page 6: Listener

Classe internaClasse interna Si può, si può !!!!Si può, si può !!!! Si può avere una classe all’interno di un’altraSi può avere una classe all’interno di un’altra Ci si deve solo assicurare che la definizione della Ci si deve solo assicurare che la definizione della

classe interna sia all’interno delle parentesi graffe classe interna sia all’interno delle parentesi graffe della classe esterna.della classe esterna.

Class Esterna {Class Esterna { Class Interna {Class Interna {

Void go() {Void go() { }}

}}

}}

Page 7: Listener

La classe internaLa classe interna

La classe interna può usare tutte le variabili La classe interna può usare tutte le variabili d’istanza della classe esterna, anche le d’istanza della classe esterna, anche le variabili private.variabili private.

Pertanto la classe interna può usare i metodi e Pertanto la classe interna può usare i metodi e le variabili della classe esterna, come se questi le variabili della classe esterna, come se questi fossero definiti al suo interno.fossero definiti al suo interno.

Page 8: Listener

esempioesempio