Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/05/2012, 07:29
Avatar de cronopiomx
cronopiomx
 
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 12 años
Puntos: 28
Pregunta Respuesta: click en Jlabel y click en GridLayout!!!

Cita:
Iniciado por chuidiang Ver Mensaje
Puedes añadir un MouseListener a los Label. Puedes añadir el mismo MouseListener a todos los label, el método getSource() del MouseEvent te puede ayudar a identificar el JLabel concreto.

Otra opción es añadir el MouseListener al panel (no al GridLayuout). Los métodos getPoint(), getX() o getY() del mouseevent te ayudan a saber las coordendas en las que se ha hecho click (el 0,0 es la esquina superior izquierda del panel). Tendrías que "calcular" a que JLabel corresponde. El getBounds() de cada label te puede ayudar a indentificar dónde está colocado el JLabel respecto al panel.

Es más sencilla y segura la primera opción, sólo necesitas un mismo MouseListener para todos los JLabel y se puede añadir fácilmente si has hecho bucles para crear los JLabel. Además, JLabel tiene un metodo setName() y luego, con ((JLabel)mouseEvent.getSource()).getName() puedes identificar ese nombre. El nombre puede ser cualquier cosa que te ayude luego a identificar mejor el JLabel (el nombre de la pieza que tiene dibujada, la fila,columna en el tablero, etc)

Se bueno.

chuidiang, Amigo, no entiendo lo que me dices, he probado algo pero no me sale, explicame un poco mas, con este ejemplo !!!!!

saludos
crono


Código:
import javax.swing.*;
import java.awt.*;

public class board2 {

JFrame frame;
JPanel squares[][] = new JPanel[8][8];

public board2() {
    frame = new JFrame("Simplified Chess");
    frame.setSize(500, 500);
    frame.setLayout(new GridLayout(8, 8));

    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            squares[i][j] = new JPanel();

            if ((i + j) % 2 == 0) {
                squares[i][j].setBackground(Color.black);
            } else {
                squares[i][j].setBackground(Color.white);
            }   
            frame.add(squares[i][j]);
        }
    }

    squares[0][0].add(new JLabel(new ImageIcon("rookgreen.png")));
    squares[0][2].add(new JLabel(new ImageIcon("bishopgreen.png")));
    squares[0][4].add(new JLabel(new ImageIcon("kinggreen.png")));
    squares[0][5].add(new JLabel(new ImageIcon("bishopgreen.png")));
    squares[0][7].add(new JLabel(new ImageIcon("rookgreen.png")));

    squares[7][0].add(new JLabel(new ImageIcon("rookred.png")));
    squares[7][2].add(new JLabel(new ImageIcon("bishopred.png")));
    squares[7][4].add(new JLabel(new ImageIcon("kingred.png")));
    squares[7][5].add(new JLabel(new ImageIcon("bishopred.png")));
    squares[7][7].add(new JLabel(new ImageIcon("rookred.png")));

    for (int i = 0; i < 8; i++) {
        squares[1][i].add(new JLabel(new ImageIcon("pawngreen.png")));
        squares[6][i].add(new JLabel(new ImageIcon("pawnred.png")));
    }

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

public static void main(String[] args) {
    new board2();
}
}