[JAVA] Problema con eventos(botones y listas)

B

Buenas tengo un pequeño problemilla.
Tengo creado un programa con sus respectivos botones y una lista con objetos de una misma clase.
Lo que pretendo es que al seleccionar el elemento de la lista, y luego darle a un boton, me haga una accion, pero soy incapaz de hacerlo.

Os pongo un trozito de codigo:

         if (obj == botonComer) {
            int index = 0;
                    if (this.zoo.getPlayer().getEnergia() != 0) {
                        if (this.zoo.getIndiceAnimalActual()!= -1) {
                            if( obj == listaAlimentosMismaCelda){
                             index=listaAlimentosMismaCelda.getSelectedIndex();
                             getZoo().come(index);
                             getZoo().Turno();
                             
} } else { //Aqui va codigo xorra } }

Os comento, obj es Object obj = evento.getSource();
Lo que pretendo es que la lista listaAlimentosMismaCelda (que me guarda en una lista los alimentos que hay en un sitio), cuando selecciono uno de estos, y luego le doy al botonComer, un animal deberia comerlo. Pero claro, el programa no detecta cuando le doy al alimento de la lista listaAlimentosMismaCelda, ya que lo he comprovado con chivatos(System.out.println("a");) y ni si quiera entra dentro del if.

yarviT0

a ver para intefaces en java tienes que crear 3 clases MVC (modelo vista controlador)

-Modelo seria donde haces el tema de porgramación de listas, o la clase que tengas q definir.
-Vista donde define la interfaz.
-Controlador es el que se encargaría de controlar la vista y hacer las acciones con el modelo.

Así en resumen para tu caso:

tendrías que hacer

public class Vista extends JPanel //o JFrame según luego hagas en el main
{
//Definición de botones, ventanas etc... x ejemplo
private JButton boton;

public Vista(){//metes los elementos que vayas a usar
 boton= new JButton;
 add(boton)
}
public void controlador (ActionListener ctr){
  boton.addActionListener(ctr);//das de alta el controlador
 boton.setActionCommand("boton");//le asignas un nombre al evento para luego distingi     

}
//metodos que necesitas tipo: cambiar el mensaje de una etiketa, leer texto,..

}

Ahora otra nueva clase:
Public class Control implements ActionListener{
private Vista v;
Control(Vista vis)//constructor
{
v=vis;
}
public void actionPerformed(ActionEvent e) //al implementar ActionList hay q declarar este met{
String comando = e.getActionCommand();
//ahora tengo en comando el identificador
if (comando.equals("boton"){

//aqui pones las acciones que quiers hacer al pulsar el boton
}
}

y luego en el main nsoe te puede olvidar dar de alta al controlador en la vista:

JFrame ventana= new ventana();
Controlador ctr= new Controlador(ventana);
ventana.contolador(ctr);

GamA

Deberías decir que es "botonComer" exactamente, porque evento.getSource(); retorna un Object que lo metes en obj y luego lo comparas con él.

Si intentas comparar 2 botones vas mal. Date cuenta que botonComer será un botón pero evento.getSource(); lo estás metiendo en un object y al comparar un object con un botón te dirá que no es la misma instancia y por tanto no entrará en el if.

Yo lo que haría es que cuando pulses el botón pongas una variable a un número.

Xej:

int botonPulsado;

cuando pulse el botonComer pones botonPulsado=1;

Y luego en ese método haces un switch del botonPulsado.

switch(botonPulsado){
case 1:
comer();
break;
case 2:
...
}

Mucho mejor y funciona :P

MTX_Anubis

Pon más código porque con eso no nos aclaramos xd

Si no entra dentro del if es porque la condición no se cumple xD

obj == botonComer

No sé bien lo que buscas con eso. BotonComer es una clase o un objeto? Supongo que objeto porque las clases debería empezar por mayúscula xD. Bueno si es un objeto redefine el método equals para comprobar que sean iguales y haces esto:

if (botonComer.equals(obj)){
blablablabla
}

Si lo que quieres comprobar es que sea de la misma clase, usa instanceof:

if (obj instanceof botonComer){
       botonComer aux = (botonComer) obj;
       ...
       lo que quieras hacer
}

Bueno eso realmente lo deberías hacer siempre que saques algún objeto de los eventos.

B

gracias por todas las respuestas pero ya lo solucione! ;)

zildjian

GUI II de P3 huh? Yo ya la dejé...

Usuarios habituales