Galera, estou com dúvidas em relação aos eventos no JButton.
Seguinte, estou implementando um jogo da memória, criei um GridLayout, JButtons, joguei imagem nos JButtons e depois joguei os JButtons no GridLayout.
Coloquei como Default a mesma imagem para todos os JButtons (fundo das cartas). Quando o JButton é clicado, a imagem muda e aparece a frente da carta).
Eis o meu dilema: Não sei como comparar o conteúdo do clik anterior com o clik atual, pois se as imagens forem iguais, tenho que deixá-las, se forem diferentes tenho que mudar para a imagem de fundo da carta.
E qual o conteúdo dos botões ?
Só as imagens ?
Se for você pode comparar os icones com o método equals: if(butao.getIcon().equals(outroBotao.getIcon()))
O conteúdo são imagens. Segue abaixo o código.
No caso, esse código só faz mudar o conteúdo inicial do botão (fundo da carta) para o conteúdo posterior (frente da carta). Este é meu primeiro programa usando GUI. Ainda não sei como tratar os eventos. O que eu quero saber é se eu posso tratar eventos na GridLayout ao invés de tratar em cada botão. Porque eu não consigo pensar numa forma de tratar cada jogada e verificar se a imagem descoberta é igual a imagem que eu descobri anteriormente e caso não seja, desvirar a carta (colocar a imagem do fundo).
javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import java.util.Random;
public class Memoria extends JFrame {
JButton [] botao;
ImageIcon [] icones;
ImageIcon padrao;
Random r = new Random();
JButton memoria;
public Memoria () {
super ("Jogo da Memória");
icones = new ImageIcon[20];
Random r = new Random();
padrao = new ImageIcon("E:/Outros/UFS/JAVA/Eclipse/teste/Memoria/src/img/padrao.gif");
padrao.setImage(padrao.getImage().getScaledInstance(110, 114, 200));
botao = new JButton[20];
for (int i = 0; i < ((botao.length)/2); i++) {
String aux="E:/Outros/UFS/JAVA/Eclipse/teste/Memoria/src/img/"+Integer.toString(i)+".gif";
icones[i] = new ImageIcon(aux);
icones[i].setImage(icones[i].getImage().getScaledInstance(110, 114, 200));
}
for (int i = 10; i < botao.length; i++) {
icones[i] = icones[i-10];
}
for (int i = 0; i < botao.length; i++) {
int pos = r.nextInt(botao.length);
ImageIcon img = icones[i];
icones[i] = icones[pos];
icones[pos] = img;
}
for (int i = 0; i < botao.length; i++) {
botao[i] = new JButton(padrao);
}
setLayout (new BorderLayout());
JPanel panel = new JPanel();
panel.setLayout(new GridLayout (4,5,2,2));
for (int i = 0; i < botao.length; i++){
panel.add(botao[i]);
}
add(panel,BorderLayout.CENTER);
TratarEventos te = new TratarEventos ();
for (int i = 0; i < botao.length; i++) {
botao[i].addActionListener(te);
}
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize(600,520);
setVisible(true);
}
private class TratarEventos implements ActionListener {
public void actionPerformed (ActionEvent evento) {
for (int i = 0; i < botao.length; i++) {
if (evento.getSource() == botao[i])
botao[i].setIcon(icones[i]);
}
}
}
}