entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Hay forma de agregar MouseListener a un DrawRect en java

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?Ejemplo

1 Respuesta

0voto

Leonardo-Tadei Puntos227320

Hola Francisco... yo creería que no hay forma, pero tendría que revolver en la documenhtación para confirmártelo.

Podrías probar poner el DrawRect() sobre un JPanel o sobre un JFrame y capturar los eventos en ellos: si mi memoria no falla (cosa muy posible en este momento) el DrawRect() es transparente a los eventos y lo recibe el componente de abajo.

Por favor, cuéntanos si se reciben los eventos en el componente "de abajo"!

0voto

francisco-quijada-16 comentado

Si es precisamente lo único que me queda hacer: 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 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 se te ocurre alguna mejor forma de hacer esto te estaré agradecido:

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);

                        }

            } 
        }

}

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta