Java gestione eventi introduzione La gestione degli eventi Ci sono 3 oggetti interessati alla g. d. e.: • L’oggetto interessato (event source) ad esempio se clicchiamo su una label, sarà la label stessa • l’evento ad esempio se clicchiamo su una label, sarà il click del mouse, con le sue specificità tipo la posizione del mouse, lo stato dei suoi tasti, ecc. In generale è un oggetto di classe ActionEvent • il gestore dell’evento (listener) il gestore sarà un oggetto che implementa l’intefaccia ActionListener ed avrà un metodo actionPerformed( … ) che riceve come parametro l’evento. La gestione degli eventi • Le classi e le interfacce citate si trovano in java.awt.event.* • le interfacce sono delle particolari classi che contengono solo la dichiarazione del metodo, che deve essere di volta in volta implementato (override) • si parla di modello “osservatore”, pattern Observer in inglese …in pratica • costruiamo una classe GestoreEventi import java.awt.event.*; class GestoreEvento implements ActionListener { public void actionPerformed( ActionEvent evento ) { System.out.println("Hai premuto:" + evento.getActionCommand()); System.out.println(" when: " + evento.getWhen()); System.out.println(" tasti: " + evento.getModifiers()); System.out.println(" source: " + evento.getSource()); System.out.println(" id: " + evento.getID()); System.out.println(" when:" + evento.paramString()); } } …in pratica • Creiamo una classe che visualizza un frame con 2 pulsanti import java.awt.* class FrameConPulsanti extends Frame { FrameConPulsanti() { this.setBounds(20,20, 200, 300); this.setVisible(true); Button btn1 = new Button("apri"); Button btn2 = new Button("chiudi"); /* aggiungere qui il gestore dell’evento */ this.setLayout(new FlowLayout(FlowLayout.CENTER, 10,10)); this.add(btn1); this.add(btn2); } } …in pratica • Aggiungiamo il Listener (l’ascoltatore dell’evento) subito prima di aggiungere i pulsanti al form GestoreEvento gestoreClick = new GestoreEvento(); btn1.addActionListener( gestoreClick ); btn2.addActionListener( gestoreClick ); …in pratica • infine costruiamo una nuova classe con main per testare le nostre classi class ProvaFrameEventi { public static void main(String[] s ) { new FrameConPulsanti(); } } Compilare ed eseguire • Dovendo modificare più file insieme, conviene: • creare una cartella per il nostro “progetto” • compilare tutti i sorgenti .java con javac *.java • eseguire l’unica classe che ha il main con java ClasseConMain