Unità E3
Eventi
Obiettivi
• Conoscere il concetto di evento e gestore di evento
• Conoscere i pulsanti in Swing e la gestione dell’evento clic
• Saper gestire gli eventi di spostamento del cursore nei campi di
testo
• Saper gestire gli eventi di selezione sulle liste
• Comprendere come catturare gli eventi di selezione di una voce
nelle combo box
• Comprendere come intercettare la selezione di check box
• Saper creare un menu
Eventi
• Un evento è una qualsiasi interazione dell’utente
con l’interfaccia utente.
• Alcuni eventi sono gestiti direttamente dal
componente stesso
(es. digitazione in un campo di testo)
• È possibile (e in alcuni casi necessario) gestire
direttamente mediante metodi specifici gli eventi
legati a un componente
(es. controllo della correttezza del testo inserito in un
campo).
Gestore di evento
• Un gestore di evento è un blocco di
codice che gestisce un particolare
evento legato a un particolare
componente.
• Un componente visuale può
supportare un numero indefinito di
gestori di evento.
• In Java gli eventi sono descritti da
una classe, che incapsula tutte le
informazioni su quanto è successo.
• Il gestore di evento non è altro che
un metodo di una classe che
implementa una specifica interfaccia.
Eventi su un bottone
• Definizione e istanziazione di un bottone
JButton pulsante = new JButton(“OK”);
• Definizione di una classe per gestire l’evento
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GestorePuls1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println( “pulsante attivato” );
}
}
• Associazione del gestore al pulsante
pulsante.addActionListener( new GestorePuls1() );
Gestore per più bottoni
• Uno stesso gestore di evento può essere associato a
più pulsanti. È sufficiente passare lo stesso oggetto
ai metodi addActionListener() di più pulsanti.
• L‘informazione relativa a “chi” ha generato l’evento è
estraibile dall’oggetto ActionEvent, che rappresenta
l’evento occorso. Questa classe definisce il metodo
getSource(), che ritorna l’oggetto che ha generato
l’evento.
Eventi sui campi di testo
• È possibile controllare il contenuto del campo di testo via via
che l’utente lo valorizza.
• L’evento è descritto dalla classe CaretEvent, mentre il gestore di
evento dall’interfaccia CaretListener.
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
public class GestoreCursore implements CaretListener {
public void caretUpdate(CaretEvent e) {
//estrae l’oggetto sorgente dell’evento
JTextField campoTesto =
(JTextField)e.getSource();
…
}
}
Associazione gestore-campo testo
JTextField campoTesto = new JTextField();
campoTesto.addCaretListener( new GestoreCursore() );
Liste
• L’evento forse più importante relativo alle liste è conesso alla
selezione degli elementi.
• L’evento di modifica della selezione è ListSelectionEvent, che è
inviato a gestori di evento che implementano l’interfaccia
ListSelectionListener.
• Esempio:
String[] v = { “Uno”, “Due”, “Tre” };
JList lista = new JList(v);
lista.setSelectedIndex(0);
lista.setSelectionMode(
ListSelectionModel.SINGLE_INTERVAL_SELECTION );
lista.addListSelectionListener( new GestoreLista() );
Eventi sulle liste
• Il gestore di evento è implementato nella classe GestoreLista
con il metodo valueChanged.
• Nell’esempio si stampa un elenco degli elementi selezionati, ma
solo se il valore della selezione è “stabile”. Questa informazione
è fornita dall’evento con il metodo getValueIsAdjusting().
import javax.swing.JList;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class GestoreLista implements
ListSelectionListener {
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
JList lista = (JList)e.getSource();
Object[] v = lista.getSelectedValues();
…
Combo box
• L’evento ActionEvent è sollevato anche dalla classe
JComboBox ed è relativo alla selezione di un
elemento dalla lista di quelli disponibili.
• La classe JComboBox supporta anche l’evento
ItemEvent, che descrive la selezione di un elemento
in una combo box in modo più specifico rispetto
all’ActionListener.
Caselle di selezione
• Le caselle di selezione (check box) sono implementate come
pulsanti dotati di stato che può essere “attivo” o “disattivo”.
• ChangeEvent è l’evento che segnala la modifica dello stato.
• Per aggiungere un ascoltatore di questo tipo di evento a un
oggetto JCheckBox è necessario utilizzare il metodo
addChangeListener:
JCheckBox casellaSelezione =
new JCheckBox(“Seleziona questa voce”);
casellaSelezione.addChangeListener(
new GestoreCheckBox() );
public class GestoreCheckBox implements ChangeListener{
public void stateChanged(ChangeEvent e) {
…
Menu
• Un menu è costituito da tre elementi fondamentali:
– JMenuBar (barra del menu)
– JMenu (singolo menu)
– JMenuItem (singola voce di menu, a cui viene associata una
descrizione, eventualmente un’icona e un gestore di evento di
selezione.
Esempio - menu
JMenuBar barraMenu = new JMenuBar();
//crea il menu file
JMenu fileMenu = new JMenu(“File”);
fileMenu.add( new JMenuItem(“Nuovo”));
fileMenu.add( new JMenuItem(“Apri”));
fileMenu.addSeparator();
fileMenu.add( new JMenuItem(“Salva”));
…
//crea il menu modifica
JMenu modificaMenu = new JMenu(“Modifica”);
//aggiunge i due menu alla barra menu
barraMenu.add( fileMenu );
barraMenu.add( modificaMenu );
//crea la finestra
JFrame finestra = new JFrame(“Prova”);
finestra.setJMenuBar( barraMenu );
Scarica

Unità C1