Editando Eventos aos JButtons

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]);
			}
		}
	}
}