listener
DESCRIPTION
come collegare due metodi actionperformed a due bottoniTRANSCRIPT
ListenerListener
Lezione sui listener e le classi interneLezione sui listener e le classi interne
dicembre 2008dicembre 2008
Prof. Silvano NataliziProf. Silvano Natalizi
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 ?
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!
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.
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…
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() { }}
}}
}}
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.
esempioesempio