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

Imagen en jFrame junto a GridLayout!!!???

Estas en el tema de Imagen en jFrame junto a GridLayout!!!??? en el foro de Java en Foros del Web. Hola, amigos, tengo este codigo que me pinta en JPanels de un JFrame 1 tablero de ajedrez (grilla) usando un GridLayout como cuadricula, el problema ...
  #1 (permalink)  
Antiguo 14/05/2012, 09:24
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 11 años, 11 meses
Puntos: 28
Pregunta Imagen en jFrame junto a GridLayout!!!???

Hola, amigos, tengo este codigo que me pinta en JPanels de un JFrame 1 tablero de ajedrez (grilla) usando un GridLayout como cuadricula, el problema esta en que quiero un poco mas al lado del tablero un espacio en mi Jframe para poner las 6 fichas del ajedrez y seleccionarlas y ubicarlas en el tablero???, ahora he intentado y como que el GridLayout se ajusta al Jframe y no se como darle las dimensiones que quiero al tablero para poder ubicar las piezas al lado????

saludos
Alex

Código:
public class Board {
    private JPanel squares[][] = new JPanel[8][8];

    public Board(){}
    
    public void buildBoard(JFrame frame)
    {
        frame = new JFrame("My 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("src\\images\\wRook.gif")));
        squares[0][1].add(new JLabel(new ImageIcon("src\\images\\wKnight.gif")));
        squares[0][2].add(new JLabel(new ImageIcon("src\\images\\wBishop.gif")));
        squares[0][3].add(new JLabel(new ImageIcon("src\\images\\wQueen.gif")));
        squares[0][4].add(new JLabel(new ImageIcon("src\\images\\wKing.gif")));
        squares[0][5].add(new JLabel(new ImageIcon("src\\images\\wBishop.gif")));
        squares[0][6].add(new JLabel(new ImageIcon("src\\images\\wKnight.gif")));
        squares[0][7].add(new JLabel(new ImageIcon("src\\images\\wRook.gif")));

        squares[7][0].add(new JLabel(new ImageIcon("src\\images\\bRook.gif")));
        squares[7][1].add(new JLabel(new ImageIcon("src\\images\\bKnight.gif")));
        squares[7][2].add(new JLabel(new ImageIcon("src\\images\\bBishop.gif")));
        squares[7][3].add(new JLabel(new ImageIcon("src\\images\\bQueen.gif")));
        squares[7][4].add(new JLabel(new ImageIcon("src\\images\\bKing.gif")));
        squares[7][5].add(new JLabel(new ImageIcon("src\\images\\bBishop.gif")));
        squares[7][6].add(new JLabel(new ImageIcon("src\\images\\bKnight.gif")));
        squares[7][7].add(new JLabel(new ImageIcon("src\\images\\bRook.gif")));

        for (int i = 0; i < 8; i++) {
          squares[1][i].add(new JLabel(new ImageIcon("src\\images\\wPawn.gif")));
          squares[6][i].add(new JLabel(new ImageIcon("src\\images\\bPawn.gif")));
        }
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null); //center screen
        frame.setVisible(true);
    }
}
  #2 (permalink)  
Antiguo 14/05/2012, 09:31
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Imagen en jFrame junto a GridLayout!!!???

Hola:

El GridLayout tiene todas las celdas iguales y no hay forma de modificarlas, se ajustan al ancho/alto disponible y se reparten por igual.

Tienes dos opciones

Una es añadir una columna adicional para esas fichas, pero estás limitado a 8 filas (igual que el resto del tablero) y serán del mismo tamaño que las casillas del tablero.

La otra es hacer algo un poco más complejo.

Haz el tablero en un JPanel con el GridLayout.
Al JFrame, dejando el BorderLayout que tiene por defecto, añádele en el CENTER el JPanel con el tablero y un lateral (WEST o EAST el que más te guste) otro JPanel que te hagas con las fichas para seleccionar. Aquí tienes algo del BorderLayout y de FlowLayout/BoxLayout que puede ayudarte para ese segundo panel con las fichas http://www.chuidiang.com/java/layout/BorderLayout.php

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 14/05/2012, 10:40
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 11 años, 11 meses
Puntos: 28
Respuesta: Imagen en jFrame junto a GridLayout!!!???

amigo, no entiendo como es que debor hacerlo, pruebo pero no me funciona???
  #4 (permalink)  
Antiguo 14/05/2012, 12:00
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 11 años, 11 meses
Puntos: 28
Respuesta: Imagen en jFrame junto a GridLayout!!!???

ya me funciona, segui probando, ahora la duda mia es en el JPanel de la derecha voy a poner las 6 fichas del ajedrez (6 pictures), como las puedo mover de alli hacia el tablero(el otro JPanel) y que cuando suelte el click izquierdo sobre cualquiera casilla se quede en el tablero..
s2
alex
package Controls;
import javax.swing.*;
import java.awt.*;
import java.util.Locale;

/**
*
* @author Alex
*/
public class Board {
private JPanel squares[][] = new JPanel[8][8];
private JPanel board = new JPanel();
private JPanel pieces = new JPanel();

public Board(){}

public void buildBoard(JFrame frame)
{
frame = new JFrame("My Chess");
frame.setSize(550, 500);
frame.setResizable(false);
// frame.setLayout(new GridLayout(8,8));
board.setLayout(new GridLayout(8,8,4,4));

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);
board.add(squares[i][j]);
}
}
pieces.setBackground(Color.gray);
pieces.setPreferredSize(new Dimension(110,0));
frame.add(pieces, BorderLayout.EAST);
frame.add(board, BorderLayout.WEST);

squares[0][0].add(new JLabel(new ImageIcon("src\\images\\wRook.gif")));
squares[0][1].add(new JLabel(new ImageIcon("src\\images\\wKnight.gif")));
squares[0][2].add(new JLabel(new ImageIcon("src\\images\\wBishop.gif")));
squares[0][3].add(new JLabel(new ImageIcon("src\\images\\wQueen.gif")));
squares[0][4].add(new JLabel(new ImageIcon("src\\images\\wKing.gif")));
squares[0][5].add(new JLabel(new ImageIcon("src\\images\\wBishop.gif")));
squares[0][6].add(new JLabel(new ImageIcon("src\\images\\wKnight.gif")));
squares[0][7].add(new JLabel(new ImageIcon("src\\images\\wRook.gif")));

squares[7][0].add(new JLabel(new ImageIcon("src\\images\\bRook.gif")));
squares[7][1].add(new JLabel(new ImageIcon("src\\images\\bKnight.gif")));
squares[7][2].add(new JLabel(new ImageIcon("src\\images\\bBishop.gif")));
squares[7][3].add(new JLabel(new ImageIcon("src\\images\\bQueen.gif")));
squares[7][4].add(new JLabel(new ImageIcon("src\\images\\bKing.gif")));
squares[7][5].add(new JLabel(new ImageIcon("src\\images\\bBishop.gif")));
squares[7][6].add(new JLabel(new ImageIcon("src\\images\\bKnight.gif")));
squares[7][7].add(new JLabel(new ImageIcon("src\\images\\bRook.gif")));

for (int i = 0; i < 8; i++) {
squares[1][i].add(new JLabel(new ImageIcon("src\\images\\wPawn.gif")));
squares[6][i].add(new JLabel(new ImageIcon("src\\images\\bPawn.gif")));
}

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setLocationRelativeTo(null); //center screen
frame.setVisible(true);
}
}
  #5 (permalink)  
Antiguo 14/05/2012, 12:56
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Imagen en jFrame junto a GridLayout!!!???

Un verdadero "drag and drop" es complicado en java http://chuwiki.chuidiang.org/index.p...strar_y_Soltar) , http://www.javaworld.com/javaworld/j...dragndrop.html

Intenta algo más sencillo, como hacer click sobre la pieza para seleccionarla y luego click sobre la casilla del tablero. Eso se puede hacer fácilmente añadiendo addMouseListener() sobre los JLabel (o los componentes que hayas puesto para las piezas).

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #6 (permalink)  
Antiguo 14/05/2012, 21:55
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Imagen en jFrame junto a GridLayout!!!???

Que pasa que todos están haciendo ajedreces hoy ¬¬......

mira para tener un panel lateral fuera del tablero, yo lo que haria es dividir la pantalla, osea a todo el JFrame le aplicas un Grid por ejemplo, o un flow, donde solo pondrás dos cosas, un panel en la izquierda con su contenedor y un panel en la derecha con su contenedor, y al de la derecha le haces un grid con las 8x8 que será el tablero y al contenedor izquierdo será tu menú...

yo nunca he intentado un drag an drop pero una vez hice un lápiz que dibujaba con el mouse, creo que es similar, estar actualizando la posición de tu figura respecto a la del mouse con el evento de mouseDragged, pero nunca lo he echo.....
__________________
De nada, hay te encargo +1...
  #7 (permalink)  
Antiguo 17/05/2012, 09:11
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 11 años, 11 meses
Puntos: 28
Pregunta Respuesta: Imagen en jFrame junto a 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

Mi Class Main. Java
------------------------------------------------
[CODE]package chesss;

public class Main {
private static JFrame frame = new JFrame();
private static Board board;

public static void main(String[] args)
{
board = new Board(frame);
board.buildBoard();

board.mouseClickjRadioButtonWhite();
board.mouseClickjRadioButtonBlack();
board.mouseClickjRadioButtonRook();
board.mouseClickjRadioButtonKnight();
board.mouseClickjRadioButtonBishop();
board.mouseClickjRadioButtonQueen();
board.mouseClickjRadioButtonKing();
board.mouseClickjRadioButtonPawn();
}
}
  #8 (permalink)  
Antiguo 17/05/2012, 09:12
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 11 años, 11 meses
Puntos: 28
Respuesta: Imagen en jFrame junto a GridLayout!!!???

[/CODE]

Mi Class Board. Java
------------------------------------------------
public class Board{
private JPanel squares[][] = new JPanel[8][8];
private JFrame frame;
private JPanel board = new JPanel();
private JPanel right = new JPanel();
private JPanel up = new JPanel();
private JPanel down = new JPanel();
private JPanel left = new JPanel();
private String [] namePieces = { "src\\images\\wRook.gif", "src\\images\\wKnight.gif",
"src\\images\\wBishop.gif","src\\images\\wQueen.gi f",
"src\\images\\wKing.gif", "src\\images\\wPawn.gif",
"src\\images\\bRook.gif", "src\\images\\bKnight.gif",
"src\\images\\bBishop.gif","src\\images\\bQueen.gi f",
"src\\images\\bKing.gif", "src\\images\\bPawn.gif"
};
private JRadioButton w = new JRadioButton("Blancas", true);
private JRadioButton b = new JRadioButton("Negras ", false);
private JRadioButton [] jradios = new JRadioButton[6];
private boolean option = false;

public Board(JFrame f){ this.frame = f; }
public void buildBoard()
{
frame = new JFrame("My Chess");
frame.setSize(515, 500);
frame.setResizable(false);
// frame.setLayout(new GridLayout(8,8));
board.setLayout(new GridLayout(8,8,4,4));

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.white);
else squares[i][j].setBackground(Color.black);
board.add(squares[i][j]);
}
}

buildPieces();
frame.add(board, BorderLayout.CENTER);
squares[0][0].add(new JLabel(new ImageIcon(namePieces[0])));
squares[0][1].add(new JLabel(new ImageIcon(namePieces[1])));
squares[0][2].add(new JLabel(new ImageIcon(namePieces[2])));
squares[0][3].add(new JLabel(new ImageIcon(namePieces[4])));
squares[0][4].add(new JLabel(new ImageIcon(namePieces[3])));
squares[0][5].add(new JLabel(new ImageIcon(namePieces[2])));
squares[0][6].add(new JLabel(new ImageIcon(namePieces[1])));
squares[0][7].add(new JLabel(new ImageIcon(namePieces[0])));

squares[7][0].add(new JLabel(new ImageIcon(namePieces[6])));
squares[7][1].add(new JLabel(new ImageIcon(namePieces[7])));
squares[7][2].add(new JLabel(new ImageIcon(namePieces[8])));
squares[7][3].add(new JLabel(new ImageIcon(namePieces[10])));
squares[7][4].add(new JLabel(new ImageIcon(namePieces[9])));
squares[7][5].add(new JLabel(new ImageIcon(namePieces[8])));
squares[7][6].add(new JLabel(new ImageIcon(namePieces[7])));
squares[7][7].add(new JLabel(new ImageIcon(namePieces[6])));

for (int i = 0; i < 8; i++) {
squares[1][i].add(new JLabel(new ImageIcon(namePieces[5])));
squares[6][i].add(new JLabel(new ImageIcon(namePieces[11])));
}

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setLocationRelativeTo(null); //center screen
frame.setVisible(true);
}
public void buildPieces()
{

right.setBackground(Color.gray);
right.setPreferredSize(new Dimension(75,0));

w.setBackground(right.getBackground());
b.setBackground(right.getBackground());

frame.add(right, BorderLayout.EAST);///falta este panel
paintWhitePieces(0, 6);

up.setBackground(Color.gray);
w.setBackground(up.getBackground());
b.setBackground(up.getBackground());
up.add(new JLabel("Piezas"));
up.add(w);
up.add(b);
up.setPreferredSize(new Dimension(2,40));
frame.add(up, BorderLayout.NORTH);

down.setLayout(new FlowLayout(22));
down.setPreferredSize(new Dimension(2,50));
down.setBackground(Color.gray);
frame.add(down, BorderLayout.SOUTH);

left.setLayout(new GridLayout(8,1,4,4));
left.setPreferredSize(new Dimension(77,50));
left.setBackground(Color.gray);
paintNumbers();
frame.add(left, BorderLayout.WEST);
}
public void paintWhitePieces(int ini, int fin)
{
//right.add(new JLabel("---------------"));
for (int i = ini; i < fin; i++)
{
right.add(new JLabel(new ImageIcon(namePieces[i])));
jradios[i-ini] = new JRadioButton();
jradios[i-ini].setBackground(right.getBackground());
right.add(jradios[i-ini]);
}
}

public void paintNumbers()
{
for (int i =8; i >= 1; i--)left.add(new JLabel(" "+i));
down.add(new JLabel(" a"));
down.add(new JLabel(" b")); down.add(new JLabel(" c"));
down.add(new JLabel(" d")); down.add(new JLabel(" e"));
down.add(new JLabel(" f"));down.add(new JLabel(" g"));
down.add(new JLabel(" h"));
}

///////////RadioButton 2 colores////////////
public void mouseClickjRadioButtonBlack() {
b.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
b.setSelected(true);
w.setSelected(false);
option = false;
right.removeAll();
frame.add(right, BorderLayout.EAST);///falta este panel
paintWhitePieces(6, 12);
frame.setVisible(true);
}
});
}

public void mouseClickjRadioButtonWhite() {
w.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
w.setSelected(true);
b.setSelected(false);
option = true;
right.removeAll();
frame.add(right, BorderLayout.EAST);///falta este panel
paintWhitePieces(0, 6);
frame.setVisible(true);
}
});
}
/////////////end/////////////////

///////////Radio Button 6 piezas////////
public void mouseClickjRadioButtonRook() {
jradios[0].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (jradios[0].isSelected()) {
jradios[1].setSelected(false); jradios[2].setSelected(false);
jradios[3].setSelected(false); jradios[4].setSelected(false); jradios[5].setSelected(false);
}
}
});
}
public void mouseClickjRadioButtonKnight() {
jradios[1].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {

if (jradios[1].isSelected()) {
jradios[0].setSelected(false); jradios[2].setSelected(false);
jradios[3].setSelected(false); jradios[4].setSelected(false); jradios[5].setSelected(false);
}
}
});
}
public void mouseClickjRadioButtonBishop() {
jradios[2].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (jradios[2].isSelected()) {
jradios[0].setSelected(false); jradios[1].setSelected(false);
jradios[3].setSelected(false); jradios[4].setSelected(false); jradios[5].setSelected(false);
}
}
});
}
public void mouseClickjRadioButtonQueen() {
jradios[3].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (jradios[3].isSelected()) {
jradios[0].setSelected(false); jradios[1].setSelected(false);
jradios[2].setSelected(false); jradios[4].setSelected(false); jradios[5].setSelected(false);
}
}
});
}
public void mouseClickjRadioButtonKing() {
jradios[4].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (jradios[4].isSelected()) {
jradios[0].setSelected(false); jradios[1].setSelected(false);
jradios[2].setSelected(false); jradios[3].setSelected(false); jradios[5].setSelected(false);
}
}
});
}
public void mouseClickjRadioButtonPawn() {
jradios[5].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (jradios[5].isSelected()) {
jradios[0].setSelected(false); jradios[1].setSelected(false);
jradios[2].setSelected(false);jradios[3].setSelected(false); jradios[4].setSelected(false);
}
}
});
}
}
  #9 (permalink)  
Antiguo 17/05/2012, 10:46
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Imagen en jFrame junto a GridLayout!!!???

nunca lo he echo, pero a los Labels les puedes agregar el MouseListener, al hacer click sobre uno activas una bandera por ejemplo, luego cuando den click en el grid bag, solo ves la posición del mouse igual con el evento del click y alli colocas el jlabel, modificando sus cordenadas en el grid y ya.....

el asunto es como verificar que se ponga en el lugar correcto y no en otro lado donde no va.... pero es otra historia..
__________________
De nada, hay te encargo +1...
  #10 (permalink)  
Antiguo 17/05/2012, 10:52
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 11 años, 11 meses
Puntos: 28
Respuesta: Imagen en jFrame junto a GridLayout!!!???

la idea mejor seria que el gridlayout tuviese algun evento que cuando le den click a el supiese que casilla seleccione????

Etiquetas: jframe, junto
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 07:03.