Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/01/2011, 13:30
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Eventos Clase Canvas

Hola,

La clase java.awt.Canvas es un java.awt.Component y no puede contener otros componentes. Así que seguramente todo el dibujado de la clase Casilla lo haces sobrecargando el método paint(); y seguramente en la clase Tablero también, por lo que los eventos del mouse van a ser recibidos solamente por la clase Tablero.

Solamente lo va a recibir el canvas Tablero porque seguramente lo agregaste al Frame con add(); pero las casillas no, por lo que no existen en la jerarquía de componentes contenidos en el Frame.

Realmente deberías usar java.awt.Panel para el Tablero y agregar los java.awt.Canvas (Casillas) con add() dentro de él (Tablero) además de usar un gridLayout para poder recibir los eventos del mouse independientemente en cada casilla.

Sino no te queda mas que calcular las coordenadas donde se recibió el evento y llamar algún método dentro de la clase Casilla que realice la acción.

Saludos,

ps:

Por ejemplo:

Código Java:
Ver original
  1. panelS = new Tablero(); // Clase que extiende java.awt.Panel
  2. celdaA = new Celda(); // Clases que extienden java.awt.Canvas
  3. celdaB = new Celda();
  4. celdaA.addMouseListener(new java.awt.event.MouseAdapter() {
  5.     public void mousePressed(java.awt.event.MouseEvent evt) {
  6.         System.out.println("mousePressed on Celda A");
  7.     }
  8. });
  9. panelS.setLayout(new java.awt.GridLayout());
  10. panelS.add(celda1);
  11. panelS.add(celda2);
  12. getContentPane().add(panelS); // Al ContentPane del Frame o JFrame