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

click en Jlabel y click en GridLayout!!!

Estas en el tema de click en Jlabel y click en GridLayout!!! en el foro de Java en Foros del Web. amigos, ya tengo hecho mi board de ajedrez y tengo las fichas que quiero posicionar dentro de el, he hecho 2 jPanels como me dijeron ...
  #1 (permalink)  
Antiguo 17/05/2012, 10:11
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 12 años, 6 meses
Puntos: 28
Pregunta click en Jlabel y click en GridLayout!!!

amigos, ya tengo hecho mi board de ajedrez y tengo las fichas que quiero posicionar dentro de el, he hecho 2 jPanels como me dijeron 1 para el board y el otro para las 6 fichas y las alterno con jRadiobutton para que alternen entre negras y blancas, entonces la idea del Drag and Drop con la imagenes y moverla al tablero no tengo tiempo para ella y debe ser un poco mas trabajoso.

Me gusta mas la idea de dar 1 click sobre la ficha, despues dar 1 click sobre cualquiera casilla del Board y que se traslade alli, mi pregunta es como hago para que hacer eso, no entiendo como hacer que el GridLayout me de la posicion en donde di click y que despues le inserte el Jlabel de la pieza, alguna ayuda me seria de interes, aqui les dejo mi codigo!!!!!!

saludos
alex
  #2 (permalink)  
Antiguo 17/05/2012, 13:12
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: click en Jlabel y click en GridLayout!!!

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.
__________________
Apuntes Java
Wiki de Programación

Última edición por chuidiang; 17/05/2012 a las 13:18
  #3 (permalink)  
Antiguo 17/05/2012, 14:03
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años, 7 meses
Puntos: 69
Respuesta: click en Jlabel y click en GridLayout!!!

Pues como te dije aca que básicamente es lo mismo que ha dicho chuidiang, que yo sepa no hay evento para saber en que casilla del grid se da click (que yo sepa).... por lo que como dice chui, tendras que obtener la posicion del puntero en el momento que se le da el click....
__________________
De nada, hay te encargo +1...
  #4 (permalink)  
Antiguo 18/05/2012, 07:29
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 12 años, 6 meses
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();
}
}

Etiquetas: jlabel
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 23:18.