Xadrez em Swing

5 respostas
Guto_Magalhaes

Olá pessoal. Estou com a seguinte dúvida.
Estou montando um jogo de xadrez em swing. É assim: os quadradinhos são JLabels, onde eu setei as cores alternadamente com o set background, e adicionei a imagem jpg das peças com o seticon. ai joguei tudo em um arraylist e depois passe pra um JPanel com layout de grid(8,8) e ai joguei no frame. Agora, estou tentando implementar o mouseListener. Gostaria de saber como faço para acessar uma célula apenas para executar o movimento das peças. Já tentei com getComponent(), getComponentAt(Position), getComponentAt(int x, int y) mas ainda não consegui. Se alguem tiver alguma idéia, por favor, me passem.

Obrigado à todos.

5 Respostas

ivo_costa

Me ajude a te ajudar:
Como se adiciona um array(List) de Labels a um Jpanel? Tu adicionou um por um ou passou o array interiro e o swing se virou?

Guto_Magalhaes

Eu implementei um while e fui passando um por um pro JPanel

ivo_costa
Ah tá, eu pensei que tu tinha coloca os JLabels em um array e passado o array inteiro para o JPanel. Ve se isso te ajuda: Se não for coloca um pedaço do teu código e tenta ser um pouco mais específico:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class Frame extends JFrame {

	public Frame() throws Exception{
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(2,2));
		panel.setPreferredSize(new Dimension(310, 310));
		
		ArrayList<JLabel> array = new ArrayList<JLabel>(4);
		
		for (int i = 0; i < 4; i++) {
			JLabel label = new JLabel("num: " + i);
			label.addMouseListener(new MouseAdapter(){
				@Override
				public void mouseClicked(MouseEvent e) {
					((JLabel)e.getSource()).setForeground(Color.RED);
				}
			});
			
			array.add(label);
			panel.add(label);
		}
		
		for(int i=0; i<panel.getComponentCount(); i++){
			System.out.println(((JLabel)panel.getComponent(i)).getText());
		}
		
		this.add(panel);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		this.pack();
	}
	
	public static void main(String[] args) {
		try {
			new Frame();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
>
Guto_Magalhaes
import java.awt.Color;

import java.awt.Dimension;

import java.awt.GridLayout;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.util.ArrayList;
import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.WindowConstants;

public class Frame extends JFrame {

public Frame() throws Exception{   
    JPanel panel = new JPanel();   
    panel.setLayout(new GridLayout(2,2));   
    panel.setPreferredSize(new Dimension(310, 310));   
       
    ArrayList<JLabel> array = new ArrayList<JLabel>(4);   
       
    for (int i = 0; i < 4; i++) {   
        JLabel label = new JLabel("num: " + i);   
        label.addMouseListener(new MouseAdapter(){   
            @Override   
            public void mouseClicked(MouseEvent e) {   
                ((JLabel)e.getSource()).setForeground(Color.RED);   
            }   
        });   
           
        array.add(label);   
        panel.add(label);   
    }   
       
    for(int i=0; i<panel.getComponentCount(); i++){   
        System.out.println(((JLabel)panel.getComponent(i)).getText());   
    }   
       
    this.add(panel);   
    this.setLocationRelativeTo(null);   
    this.setVisible(true);   
    this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);   
    this.pack();   
}   
   
public static void main(String[] args) {   
    try {   
        new Frame();   
    } catch (Exception e) {   
        e.printStackTrace();   
    }   
}

}

Hum, blza, eu tava fazendo diferente. Vou tentar aplicar isso, ai se der certo eu aviso.

Vlw.

Guto_Magalhaes

Cara, valew, funcionou. Era so falta dessa linha hehe:

((JLabel)e.getSource()).setBackground(Color.RED);

Vlw mesmo.

Abraços.

Criado 3 de setembro de 2008
Ultima resposta 3 de set. de 2008
Respostas 5
Participantes 2