Foros del Web » Programación para mayores de 30 ;) » Java »

Eventos Clase Canvas

Estas en el tema de Eventos Clase Canvas en el foro de Java en Foros del Web. Saludos! En esta mañana he decidido acudir a la comunidad para tratar de solventar una duda. Resulta que tengo una Clase Casilla que extiende de ...
  #1 (permalink)  
Antiguo 03/01/2011, 10:14
 
Fecha de Ingreso: diciembre-2009
Mensajes: 6
Antigüedad: 14 años, 10 meses
Puntos: 0
Eventos Clase Canvas

Saludos!

En esta mañana he decidido acudir a la comunidad para tratar de solventar una duda.

Resulta que tengo una Clase Casilla que extiende de Canvas. Lo que hace es dibujar un cuadrado en una determinada posición. Tengo otra Clase Tablero que tambien extiende de Canvas y que dibuja una matriz de Casilla. Lo que quiero hacer es que cuando le de click en un cuadro imprima el código (atributo de esta clase Casilla) pero el evento mouseDown() no responde. Solo responde el de la clase Tablero. Quiza haya que propagar el evento pero no se como hacerlo. seriáis tan amables de colaborar-me..

De antemano Muchas Gracias.
  #2 (permalink)  
Antiguo 03/01/2011, 13:30
Avatar de 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
  #3 (permalink)  
Antiguo 03/01/2011, 13:49
 
Fecha de Ingreso: diciembre-2009
Mensajes: 6
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Eventos Clase Canvas

Hola. Con tu explicación he logrado solventar la duda, por lo que te agradezco ademas de la respuesta el tiempo en que la has respondido

Muchas Gracias.

Etiquetas: canvas, eventos, propagacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:19.