Estoy trabajando con Netbeans IDE en Java.¿Cómo llamar a una función cuando hago clic en un jPanel (Java)?
Tengo un formulario con un JPanel. Cada JPanel tiene un gridLayout 3x3 y en cada lugar hay una imagen que representa un número [0,1,2,3,4,5,6,7,8] (la imagen se crea utilizando una clase personalizada, no solo ajustada la imagen en un laboratorio).
Quiero poder intercambiar dos imágenes en el panel cuando el usuario hace clic en ellas (primer clic: ninguna acción, segundo clic: cambie las dos imágenes instaladas en los componentes de jPanel).
Ya he creado una función exchangeComponents y con un código de prueba (como:
exchangeComponents (0,8,jPanel1)
intercambia correctamente las imágenes ubicadas en Posición1 (primera fila, primera columna) y en posición2 (tercera fila, tercera columna) .
la función de un creted es la siguiente:
public void exchangeComponents(int component1,int component2,JPanel jpanel){
try{
Component aux1 = jpanel.getComponent(component1);
Point aux1Loc = aux1.getLocation();
Component aux2 = jpanel.getComponent(component2);
Point aux2Loc = aux2.getLocation();
aux1.setLocation(aux2Loc);
aux2.setLocation(aux1Loc);
}
catch (java.lang.ArrayIndexOutOfBoundsException ex){ /* error! bad input to the function*/
System.exit(1);
}
}
supongo que neeed tener un evento que llaman a la función exchangeComponents() cuando el usuario c lamer en una de las imágenes en el jPanel1, pero ¿cómo debería hacerlo? y cómo verificar qué componentes (imágenes) el usuario ha seleccionado? Sólo sé que cuando creo un botón si se crea un clic sobre ella (desde el IDE) un evento como
private void button1ActionPerformed(java.awt.event.ActionEvent evt) {
// some code..
}
y se ejecuta el código de cumplimento.
Gracias de antemano por cualquier pista.
Gracias. Está muy claro ... pero con img1.addMouseListener (esto); Paso el formulario itselft y dice "Error: MouseListener esperado". ¿Y qué? – dragonmnl
bueno, lo hice (hice una clase getComponent implementando MouseListener) y usando img1.addMouseListener (new ComponentListener()). El problema ahora es ... Agregué un oyente para cada componente, pero cuando hago clic en cualquier componente (Imagen) el evento no se desencadena en absoluto – dragonmnl
Lo siento, no creo que lo haya dejado muy claro, pero su clase necesita implementar MouseListener, entonces necesita agregar el oyente a cada uno de sus componentes que están siendo cambiados. @dragonml – DankMemes