Académique Documents
Professionnel Documents
Culture Documents
frame.setVisible(true); } }
Il frame creato
Tornando allesempio, possiamo definire (in un file separato) la classe rilevatore come segue:
Bocchi Cinzia Ultimo aggiornamento: 05/11/2011
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent e){ //codice che gestisce l'evento } }
Una forma abbreviata della precedente scrittura, adottabile se non necessario fornire un nome all'istanza della classe ButtonListener, :
button.addActionListener(new ButtonListener());
Le classi rilevatori di eventi devono sempre contenere la direttiva di importazione import java.awt.event.*.
Rigo 2: crea una istanza della classe java.util.Random; la classe Random consente di generare un flusso di numeri random. Righi 3-5: il metodo nextInt restituisce un numero random intero compreso tra 0 (incluso) e il parametro specificato (escluso); la costante MAX_VALUE, definita nella classe ButtonListener, vale 256 poich 255 il massimo valore che ogni componente di un colore RGB pu assumere. Il codice riportato, per, genera un errore in fase di compilazione: il compilatore non in grado di trovare la variabile pane. Infatti, pane una variabile di istanza della classe InteractiveFrame e il suo riferimento non noto alla classe ButtonListener.
Una prima soluzione consiste nel comunicare tale riferimento alla classe ButtonListener, mediante il passaggio di un parametro. Vedremo in seguito un'altra soluzione che fa uso di classi interne.
Procedimento 1. Definire nella classe rilevatore, una variabile di istanza privata dello stesso
"tipo" della variabile di cui si deve passare il riferimento.
public ButtonListener(JPanel pane){ 2 this.pane = pane; 3 } public void actionPerformed(ActionEvent e){ Random randomGenerator = new Random(); int red = randomGenerator.nextInt(MAX_VALUE); int green = randomGenerator.nextInt(MAX_VALUE); int blue = randomGenerator.nextInt(MAX_VALUE); pane.setBackground(new Color(red, green, blue)); } } public class InteractiveFrame { public static void main(String[] args) { ................ button.addActionListener(new ButtonListener(pane)); ................ }
A questo punto, la classe ButtonListener conosce il riferimento al pannello e il codice contenuto nel corpo del metodo actionPerformed, non genera pi errori.
} }
ButtonListener.java
import import import import java.awt.Color; java.awt.event.ActionEvent; java.awt.event.ActionListener; java.util.Random;
import javax.swing.JPanel; public class ButtonListener implements ActionListener { public static final int MAX_VALUE = 256; private JPanel pane; public ButtonListener(JPanel pane){ this.pane = pane; } public void actionPerformed(ActionEvent e){ Random randomGenerator = new Random(); int red = randomGenerator.nextInt(MAX_VALUE); int green = randomGenerator.nextInt(MAX_VALUE); int blue = randomGenerator.nextInt(MAX_VALUE); pane.setBackground(new Color(red, green, blue)); } }
Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. Bocchi Cinzia Ultimo aggiornamento: 05/11/2011