Larback - Retornando conhecimento

O Jon Snow é Targarian

Joga da Memória com Java+Swing

O exemplo abaixo utiliza dois gerenciadores de Layout - FlowLayout e GridLayout (não ao mesmo tempo pois isso não é possível para um mesmo container). Vetores, geração de números aleatórios e diversas propriedades dos componentes da biblioteca swing. O exemplo não está comentado, pois será comentado em sala de aula. Qualquer dúvida, utilizem nosso fórum.

package jogo;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
/* by larback */
public class Memoria extends JFrame implements ActionListener{
	int [] numeros = new int[9];
	JLabel jlConteudo = new JLabel();
	JLabel jlStatus = new JLabel();
	JButton jbIniciar =new JButton("Start");
	JButton jbReset = new JButton("Novo");
	JTextField [] jtNumeros = new JTextField[9];
	public Memoria() {
		super("JMemory");
		setLayout(new FlowLayout());
		setSize(200,250);
		setLocationRelativeTo(null);
		setResizable(false);
		jbIniciar.setFont(new Font("verdana",Font.BOLD,40));
		jbIniciar.addActionListener(this);
		jbReset.addActionListener(this);
		add(jbIniciar);
		setVisible(true);
	}
	private void makeTela() {
		setLayout(new FlowLayout());
		int x = 0;
		String aux="";
		String conteudo = "<HTML><table><tr>";
		for (int i=1;i<=9;i++){
			x = new Random().nextInt(100);
			numeros[i-1] = x;
			if (x<10)
				aux = "0";
			else
				aux = "";
			conteudo+="<td><font size='20'><b>"+aux+x+"</font></b></td>";
			if (i%3==0)
				conteudo+="</tr><tr>";
		}
		conteudo+="</tr></table></html>";
		jlConteudo.setText(conteudo);
		remove(jbIniciar);
		add(jlConteudo);
		jlStatus.setText("Decore os números");
		add(jlStatus);
		jbIniciar.setText("Pronto");
		add(jbIniciar);
		revalidate();
		repaint();

	}
	private void makeTelaResposta(){
		remove(jlConteudo);
		remove(jlStatus);
		remove(jbIniciar);
		setLayout(new GridLayout(4,3));
		for (int i=0;i<9;i++){
			jtNumeros[i]= new JTextField();
			jtNumeros[i].setHorizontalAlignment(JTextField.CENTER);
			add(jtNumeros[i]);
		}
		jlConteudo.setText("");
		jbIniciar.setFont(new Font("Arial",Font.PLAIN,10));
		jbIniciar.setText(">>");
		jbIniciar.setToolTipText("Responder");
		add(jlConteudo);
		jbReset.setFont(new Font("arial",Font.PLAIN,10));
		add(jbReset);
		add(jbIniciar);
		revalidate();
		repaint();
	}
	public static void main(String[] args) {
		new Memoria();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if ((e.getSource()==jbIniciar) && (jbIniciar.getText().equals(">>"))){
			int acertos = 0;
			try {
				for (int i = 0;i<9;i++){
					if (Integer.parseInt(jtNumeros[i].getText())==numeros[i]) {
						acertos++;
						jtNumeros[i].setBackground(Color.GREEN);
					} else
						jtNumeros[i].setBackground(Color.RED);
				}
				revalidate();
				repaint();
				JOptionPane.showMessageDialog(this, "Você acertou " + acertos);
			} catch(Exception ex){
				JOptionPane.showMessageDialog(this, "Digite todos os números");
			}
		}
		if ((e.getSource()==jbIniciar) && (jbIniciar.getText().equals("Pronto")))
			makeTelaResposta();
		if ((e.getSource()==jbIniciar) && (jbIniciar.getText().equals("Start")))
			makeTela();
		if (e.getSource()==jbReset){
			getContentPane().removeAll();
			jbIniciar.setFont(new Font("verdana",Font.BOLD,40));
			makeTela();
		}
	}
}