Swing i eventos

Xavi
02 de Diciembre del 2003
Os paso un codigo a trozos, a ver si alguien me sabe decir donde esta el error:
public void init()
{
menu = new JMenu("Menu1");
menu.setMnemonic(KeyEvent.VK_A);
menuBar.add(menu);

menuItem = new JMenuItem ("Submenu1", KeyEvent.VK_T);
menuItem.addActionListener(this);
menu.add(menuItem);

menuItem = new JMenuItem ("Submenu2", KeyEvent.VK_T);
menuItem.addActionListener(this);
menu.add(menuItem);


menuItem = new JMenuItem ("Submenu3", KeyEvent.VK_F);
menuItem.addActionListener(this);
menu.add(menuItem);
}
public void actionPerformed (ActionEvent e)
{
String evento=new String();
evento=((JMenuItem).e.getSource()).getText();
System.out.println(evento);
if (evento.equals("Submenu1"))
{
try
{
System.out.println("He utilizado submenu1");
}
catch (Exception ex){}
}
if (evento.equals("Submenu2"))
{
try
{
System.out.println("HE utilizado submenu2");
}
catch (Exception ex){}
}

if (evento.equals("Submenu3"))
{
try
{
System.out.println("HE utilizado submenu3");
}
catch (Exception ex){}
}
}
El tema esta en que cuando apreto submenu 1 la variable evento adquiere correctamente el valor Submenu1 o Submenu2, pero, a la hora de ejecutar me ejecuta los 2 if i en la maquina virtual me sale

ejemplo:

submenu1
He utilizado Submenu1
He utilizado Submenu2
He utilizado submenu3
Como se ve, eso es incorrecto, a ver si hay solucin alguna, a ver si es por el if. mmm.

GRACIAS!!!

heihachi
02 de Diciembre del 2003
No será la salida así?

submenu1
He utilizado Submenu1
submenu2
He utilizado Submenu2
submenu3
He utilizado submenu3

Por cierto, es suficiente con:
String evento=((JMenuItem).e.getSource()).getText();
aunque no tenga nada que ver.

Saludos!

xavi
02 de Diciembre del 2003
Por cierto, con un switch, solo puedo trabajar con enteros no? Porque seria una forma elegante. Pero claro, estoy con strings :(

heihachi
02 de Diciembre del 2003
Bueno, no entiendo pues porque entra en todos los ifs...

Puedes cambiarlos por lo siguiente:
if (evento.equals("Submenu1")){
//lo que sea
}
else if (evento.equals("Submenu2")){

}
else if (evento.equals("Submenu3")){

}
Así seguro que sólo te entra en uno, anuque no se siserá el que toca :P

O puedes hacer la guarrada de poner return; detrás de cada System.out...

Saludos!

Xavi
02 de Diciembre del 2003
ya esta!!!! Solucionado. No me llames iluso :( pero me he colado, i he puesto en una sentencia

else if (condicion);
{estateman}

bueno, ya ves, el ";", k me he colado! Ya lo arregle i va. estare toda la vida programando y siempre fallare en lo mismo, i claro, como el compilador no me ayuda... jeje.
DEU

xavi
02 de Diciembre del 2003
No no! La salida es como he dicho! :)

Al hacer una cascada "guarrilla" de if, me funciona correctamente, ya lo he provado, pero claro, como digo es algo "guarrillo".

Lo que me cuentas que es suficiente, ya :), tienes razon, la verdad es que es como lo tenia desde el principio, pero empeze a provar cosas, i se quedo asi. jeje