PDA

View Full Version : [JAVA] il pulsante non ascolta gli eventi


Andale
31-03-2007, 20:22
Ho realizzato una semplice interfaccia grafica con un JToolBar all'interno del quale ho inserito un JButton a cui ho associato un evento... il fatto è che l'evento, alla pressione del pulsante, non avviene mai :mad: ecco il codice:


public class Gui extends JFrame implements ActionListener {
.
..
...
JToolBar jToolBar = new JToolBar();
JButton prova = new JButton("Prova");
prova.addActionListener(this);
jToolBar.add(prova);
this.add(jToolBar, BorderLayout.PAGE_START);
}

/**
* actionPerformed
*
**/
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(prova)) {
System.out.println("ok");
}
}

public static void main(String[] args) {
JFrame frame = new Gui();
frame.setSize(500,500);
frame.setDefaultLookAndFeelDecorated(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

PGI-Bis
31-03-2007, 20:29
if(e.getSource().equals(prova)) {

Il prova a cui si riferisce questa riga non è quel JButton che hai dichiarato come variabile locale. Puoi provare con;

if(e.getActionCommand().equals("Prova"))

ma sarebbe più aderente a quello che vuoi realizzare:

public class Gui extends JFrame implements ActionListener {
private JButton prova = new JButton("Prova");
.
..
...
JToolBar jToolBar = new JToolBar();
//JButton prova = new JButton("Prova");
prova.addActionListener(this);
jToolBar.add(prova);
this.add(jToolBar, BorderLayout.PAGE_START);
}

Andale
31-03-2007, 21:23
Giusto!!
Grazie per il consiglio :)

andbin
01-04-2007, 11:23
Come altro consiglio che vale in generale, tutti i reference ai vari componenti mettili come variabili di istanza (marcate private). Dopodiché è facile testare la sorgente di un evento con: e.getSource() == unComponente

lovaz
01-04-2007, 11:28
E poi, se il listener è registrato con un solo componente
quel controllo non serve proprio.