pip7.gif (2919 bytes)

Eventi

Le reazioni agli eventi generati dall'utente sono gestite da interfacce EventListener. Per potere gestire gli eventi bisogna:
1) importare il pacchetto java.awt.event 2) usare l'istruzione implements per dichiarare che si userano interfacce. Per esmpio:

import java.awt.event.*;

public class Azione extends Applet implements ActionListener {

crea una classe che userà ActionListener un'interfaccia usata con i bottoni (pulsanti) e altri componenti. Altri esempi di interfacce: MouseListener, ItemListener,...

Dopo avere implementato l'interfaccia bisogna configurare il componente, per esempio

Button tasto = new Button("Premi!");

tasto.addActionListener(this);

In questo modo il componente tasto "ascolta" gli eventi tramite l'interfaccia ActionListener, dove ascolta gli eventi? nella classe this, cioè la classe attuale (in generale l'applet stessa).

Adesso bisogna descrivere la reazione agli eventi. Per ActionListener abbiamo il metodo actionPerformed(); per esempio:

public void actionPerformed(ActionEvent evt) {

    //inserire il metodo

}

Adesso potrebbero esserci più "ascoltatori" (per esempio vari tasti), come individuare quello che ha subito l'evento? (quale pulsante è stato premuto?). Con actionPerformed si può fare:

String command = evt.getActionCommand();

in questo caso se il pulsante premuto era tasto, la stringa command diventa "premi!" (nb abbiamo chiamato l'oggetto ActionEvent evt, potevamo chiamarlo in un altro modo, per esempio e); oppure

Object source = evt.getSource();

in questo caso se il pulsante premuto era tasto, source diventa tasto.

Dopo avere identificato il componente che ha subito l'evento si può decidere come reagire.

ActionListener si usa con i Button e i TextField (invece per i CheckBox  bisogna usare itemListener; per eventi generati dal mouse, MouseListener).

Abbiamo già visto un esempio di applet con eventi (HelloWorldtasto), ecco un altro piccolo esempio con tre pulsanti che "ascoltano":

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Pulsante2 extends Applet implements ActionListener {
Font textFont = new Font("Helvetica", Font.ITALIC, 14);
Font rispFont = new Font("Courier", Font.BOLD, 20);
Button si = new Button("Si,sempre");
Button no = new Button("No, mai");
Button dip = new Button("Dipende");
String msg = "";
String que = "Quando piove c'è il sole";

public void init() {
    setBackground(Color.green);
    add(si);
    add(no);
    add(dip);
    si.addActionListener(this);
    no.addActionListener(this);
    dip.addActionListener(this);
}
public void actionPerformed (ActionEvent e) {
    String cmd = e.getActionCommand();
    if(cmd == "Si,sempre") {
        msg = "Risposta sbagliata!!!";
        }
        else if(cmd == "No, mai") {
        msg = "Risposta sbagliata";
        }
        else if(cmd == "Dipende") {
        msg = "Risposta giusta";
        }
        repaint();
       
}
public void paint(Graphics g) {
    g.setColor(Color.blue);
    g.setFont(textFont);
    g.drawString(que, 20, 50);
    g.setColor(Color.red);
    g.setFont(rispFont);
    g.drawString(msg, 20, 100);
}
}

Inserito in una pagina web (w=300 h=150) da il seguente risultato:

Facciamo un classico esempio col mouse:

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class CambiaCol extends Applet implements MouseListener{
    Color nuovoCol = Color.orange;
    Label lab = new Label(" Gioca col mouse!");
    Label labe = new Label(" Sposta il mouse!");
    Font ft = new Font("Helvetica",Font.BOLD,15);
    Panel np= new Panel();
    Panel sp= new Panel();
    Panel wp= new Panel();
    Panel ep= new Panel();
    Panel cp= new Panel();
//init
public void init(){
    setLayout(new BorderLayout(5,5));
    lab.setBackground(Color.yellow);
    np.setFont(ft);
    np.add(lab);
    np.setBackground(Color.blue);
    np.addMouseListener(this);
    add("North", np);
    labe.setBackground(Color.green);
    sp.setFont(ft);
    sp.add(labe);
    sp.setBackground(Color.blue);
    sp.addMouseListener(this);
    add("South", sp);
    wp.setBackground(Color.blue);
    wp.addMouseListener(this);
    add("West", wp);
    ep.setBackground(Color.blue);
    ep.addMouseListener(this);
    add("East", ep);
    cp.setBackground(Color.blue);
    cp.addMouseListener(this);
    add("Center", cp);
    }
//metodi
public void mouseEntered(MouseEvent e){
    e.getComponent().setBackground(nuovoCol);
}
public void mouseExited(MouseEvent e){
    e.getComponent().setBackground(Color.blue);
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public Insets getInsets() {
return new Insets(6,6,6,6);
}
}

il cui risultato è:

Osservare che per implementare un MouseListener bisogna riempire i 5 metodi mouseEntered, mouseExited, mousePressed, mouseReleased e mouseClicked, se si è interessati solo ad alcuni di questi metodi (qui per esempio mouseEntered e mouseExited) li altri vanno lasciati vuoti! ({}). Infatti per implementare un'interfaccia bisogna definire tutti i suoi metodi (altrimenti bisogna definire un "adaptor").

Il codice sarà più facilmente comprensibile dopo la lettura di Gestire lo schermo.

avanti02.gif (9574 bytes)fleche_retour.gif (1377 bytes)