La gestione degli eventi in java Swing

di  Antonio Coschignano, luned́ 10 agosto 2009
Pagina 1 di 3
Il modello ad eventi di Java Swing, già presente in Abstract Windowing Toolkit (AWT), segue un architettura molto semplice ed intuitiva dal punto di vista implementativo. Questa specifica è utilizzabile anche in altri contesti non necessariamente grafici. Il modello prevede la possibiltà per ogni componente o controllo grafico di generare un evento. Ad ogni evento generato corrisponde una classe specifica, che ne descrive l' origine e la causa dell' evento stesso, cioè viene fornito un resoconto completo sull 'evento generato. La gestione logica dell' evento viene affidata ad una sua interfaccia specifica detta listener, che contiene i metodi da implementare.

Tutti gli eventi definiti in questo modello ereditano la classe java.util.EventObject. Questa classe definisce un comportamento comune a tutti, cioè riceve nel costruttore un riferimento all' oggetto sorgente che ha generato l' evento. Tutti gli altri eventi tipo, ActionEvent, KeyEvent, MouseEvent etc. ereditano EventObject ed in base all' evento gestito ne concretizzano altri comportamenti. Ad esempio il KeyEvent definisce il codice del tasto che ha generato l' evento e così via per tutte le altre classi in base alle caratteristiche.

I Listeners

Un listener o semplicemente ascoltatore, non è altro un interfaccia che contiene i metodi relativi al tipo di evento che si vuole intercettare. Una volta creata una implementazione dell' interfaccia basta installarla nel controllo grafico da cui vogliamo intercettare gli eventi. Sarà quest'ultimo infine a notificarci le azioni invocate su di esso. Ad esempio se vogliamo intercettare gli eventi generati da un JButton, cioè l' azione del click sul pulsante, bisogna implementare l' interfaccia adatta a questo tipo di evento, l' ActionListener. Vediamo un esempio di implementazione dell' interfaccia :
public class MyFrame {
	private class MyButtonListener implements ActionListener {
		public void actionPerformed(ActionEvent evt) {
			//Qui scriviamo il codice che vogliamo eseguire all' azione del click sul pulsante
		}
	}
}
Una volta effettuata l' implementazione dell' interfaccia non ci resta che installare il listener presso il controllo grafico che in questo caso è un JButton :
JButton button = new JButton("Cliccami");
MyButtonListener listener = new MyButtonListener();
button.addActionListener(listener);
All' azione del click viene richiamato il nostro metodo che abbiamo implementato. Allo stesso modo è possibile rimuovere il listener usando l'apposito metodo :
button.removeActionListener(listener);
Diversi sono i meccanismi di implementazione dei listener. In questo caso abbiamo utilizzato una inner class, ma è anche possibile utilizzare direttamente una classe anonima oppure implementare il listener nella classe principale. La scelta dell' implementazione dipende molto dal contesto grafico su cui stiamo lavorando, oppure a scelta del programmatore. Qualunque sia questo meccanismo, vale per tutti gli altri listener disponibili in Java Swing.

Pagine » 1 2 3