Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/06/2009, 09:37
Newbie001
 
Fecha de Ingreso: febrero-2009
Mensajes: 225
Antigüedad: 16 años
Puntos: 4
JButtons en un ArrayList

Hola amigos, a ver si me pueden dar una manito.

En una parte de mi programa tengo una ventana con 5 botones que se comportan de la misma menera, pero su ImageIcon es diferente.

Código PHP:
private void setCartasJugador() {
        
cartasJugadorJButtons = new ArrayList();
        for(
int i=0i<cartasJugador.size(); i++) {
            
Carta tmpCarta = (CartacartasJugador.get(i);
            
String nombre tmpCarta.toString();
            
ImageIcon bgCarta = new ImageIcon("Imagenes/Cartas/" nombre ".png");
            
jbCarta = new JButton(bgCarta);
            
jbCarta.setVisible(true);
            
jbCarta.setBounds(setCartasJugadorPosicion(i));
            
setearAccionCartasJugador();
            
cartasJugadorJButtons.add(jbCarta);
        }
    } 
Para no repetir codigo lo que hice fue un loop, que crea los botones 1 a 1 y los pone en un ArrayList. Y luego recorriendo el ArrayList los agrego al JContentPane.

Ahora tengo un problema al intentar setearle a los botones un ActionListener. Lo que estoy haciendo es recorriendo el ArrayList de JButtons y agregandole a cada uno la accion (la cual es la misma, cambiar el ImageIcon si se hace click en el).

Pero cuando le agrego la accion a los botones:

Código PHP:
private void setearAccionCartasJugador() {
        
jbCarta.addActionListener(new java.awt.event.ActionListener() {
        public 
void actionPerformed(java.awt.event.ActionEvent e) {
            
ImageIcon bg = new ImageIcon("Imagenes/Cartas/back.png");
            
jbCarta.setIcon(bg);
        }});
    } 
Lo quice hacer de esta forma. El problema es que jbCarta es una variable de clase, que la uso solamente como apoyo, le asigno la direccion de memoria del JButton que estoy modificando, solo temporlamente.

Y lo que me esta sucediendo, es que al hacer click en cualquiera de estos botones. El unico que cambia es el ultimo JButton que fue asignado a jbCarta.

Queria saber si hay una forma de hacer lo que quiero. Si existe algun tipo de funcion que me permita tomar el objeto al cual se le esta agregando el ActionListener. Algo similar a getParent() pero para esta situacion. Ya que si pongo "this" estoy haciendo referencia al ActionListener y no al boton.

Me gustaria ahorrarme el crear cada boton por separado.

Un saludo, y gracias!