Unit à E3 Eventi
Obiettivi Conoscere il concetto di evento e gestore di evento Conoscere i pulsanti in Swing e la gestione dellevento 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 dellutente con linterfaccia 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 levento 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. Linformazione relativa a chi ha generato levento è estraibile dalloggetto ActionEvent, che rappresenta levento occorso. Questa classe definisce il metodo getSource(), che ritorna loggetto che ha generato levento.
Eventi sui campi di testo È possibile controllare il contenuto del campo di testo via via che lutente lo valorizza. Levento è descritto dalla classe CaretEvent, mentre il gestore di evento dallinterfaccia 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 loggetto sorgente dellevento JTextField campoTesto = (JTextField)e.getSource(); … } }
Associazione gestore-campo testo JTextField campoTesto = new JTextField(); campoTesto.addCaretListener( new GestoreCursore() );
Liste Levento forse più importante relativo alle liste è conesso alla selezione degli elementi. Levento di modifica della selezione è ListSelectionEvent, che è inviato a gestori di evento che implementano linterfaccia 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. Nellesempio si stampa un elenco degli elementi selezionati, ma solo se il valore della selezione è stabile. Questa informazione è fornita dallevento 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 Levento ActionEvent è sollevato anche dalla classe JComboBox ed è relativo alla selezione di un elemento dalla lista di quelli disponibili. La classe JComboBox supporta anche levento ItemEvent, che descrive la selezione di un elemento in una combo box in modo più specifico rispetto allActionListener.
Caselle di selezione Le caselle di selezione (check box) sono implementate come pulsanti dotati di stato che può essere attivo o disattivo. ChangeEvent è levento 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 unicona 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 );