Java - Como etiquetar cada lado de rectangulos pertenecientes a matriz de [x]*[y] con mouselistene

   
Vista:

Como etiquetar cada lado de rectangulos pertenecientes a matriz de [x]*[y] con mouselistene

Publicado por francisco franskferdinand@hotmail.com (1 intervención) el 15/04/2014 16:44:16
Hay forma de agregar MouseListener a un DrawRect en java para poder determinar en cual de los lados de un cuadrado un usuario hace clic? por ahora lo que hago es escuchar al mouse en el jpanel, y a través de las coordenadas que recibo del mouselistener, saber si estoy haciendo click sobre alguno de los lados de alguno de los cuadrados, en base a if-else de las coordenadas. En la imagen es una matriz de [2]*[2] pero el problema es que esta puede variar [x][y] estando x e y comprendidas entre 2 y 10, y por lo menos se me complica generar las etiquetas a1, b1... en todas las posibilidades, aquí un extracto del método que estoy haciendo que por ahora solo funciona reconociendo los lados superiores de la matriz, si alguien tiene alguna mejor forma de hacer esto te estaré agradecido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public void dibujar(){
x=3;
y=3;
posy=90;//posicion x inicial en el jpanel
posx=120;//posicion y inicial en el jpanel
largo=500/x; //para adaptar la cantidad de cuadrados (dados por la matriz[x][y]) al área de dibujo 
ancho=y=430/y;; //para adaptar la cantidad de cuadrados (dados por la matriz[x][y]) al área de dibujo 
//xM=posicion x devuelta por mouseclicked //yM=posicion y devuelta por mouseclicked
    for(int i=0;i<y;i++,b+=largo)
        for(int j=0, jj=0;j<x;j++,jj+=ancho)
        {
            if(i==0)
            {
                if(j==0)
                    if(yM==90)
                        if((xM>=(posx+jj))&&(xM<=posx+jj+ancho))
                        {
                            this.getGraphics().drawLine(posx,posy,posx+ancho+jj,posy);
 
                            this.getGraphics().drawString(String.valueOf((char)(64+(i+1)))+(j+1), posx+(ancho/2), 78);
                        }
                if(j==(x-1))
                    if(yM==90)
                        if((xM>=(posx+jj))&&(xM<=posx+jj+ancho))
                        {
                            this.getGraphics().drawLine(posx+jj,posy,posx+ancho+jj,posy);
 
                        }
                if(j!=(x-1))
                    if(yM==90)
                        if((xM>=(posx+jj))&&(xM<=posx+jj+ancho))
                        {
                            this.getGraphics().drawLine(posx+jj,posy,posx+ancho+jj,posy);
 
                        }
 
            }
        }
}


Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder