I'm doing a simple game show of the old woman next to Swing. I wanted to know why, when I trigger an event to click through the ActionPerfomed
method, my program freezes. I've been researching a bit and found that these are normal interface issues because of the Thread running. If anyone can explain the error and why this happens, I would be grateful.
Comparison class and value insertion
public class JogoVelha {
private int [][] tabuleiro = new int[3][3];
public int[][] getTabuleiro()
{
return this.tabuleiro;
}
//Seta valores do tabuleiro
public void setTabuleiroValor(int posicaoLinha,int posicaoColuna,int
jogador)
{
this.tabuleiro[posicaoLinha][posicaoColuna] = jogador;
}
//Cria valores dos jogadores
public String jogadores(int jogador)
{
Map<Integer,String> jogadores = new HashMap<Integer,String>();
jogadores.put(1, "JOGADOR 1");
jogadores.put(2, "JOGADOR 2");
return jogadores.get(jogador);
}
@SuppressWarnings("unused")
public boolean verificarPartida(int [][] tabuleiro,int jogador)
{
//compara os valores da linha/coluna
for(int i = 0; i <2;i++)
{
if( tabuleiro[0][i] == jogador && tabuleiro[1][i] == jogador &&
tabuleiro[2][i] == jogador)
{
return true;
}
continue;
}
//compara os valores coluna/ linha
for(int i= 0;i<2;i++)
{
if(tabuleiro[i][0] == jogador && tabuleiro[i][1] == jogador &&
tabuleiro[i][2] == jogador)
{
return true;
}
continue;
}
//Comparar os valores das linhas que interceptam no meio
if(tabuleiro[0][0] == jogador && tabuleiro[1][1] == jogador
&&tabuleiro[2][2] == jogador)
return true;
else if (tabuleiro[0][2] == jogador && tabuleiro[1][1] == jogador
&&tabuleiro[2][0] == jogador)
return true;
return false;
}
UI creation class
public class View extends JFrame implements ActionListener {
public static int jogadorValue = 1;
public static Integer turnos = 1;
JLabel lblJogoVelha = new JLabel("Jogo da Velha");
JLabel lblTurno = new JLabel("Turno");
JLabel lblTurnoNumber = new JLabel();
JLabel lblAjogar= new JLabel();
JLabel lblJogador = new JLabel();
public JButton b1 = new JButton("b1");
public JButton b2 = new JButton("b2");
public JButton b3 = new JButton("b3");
public JButton b4 = new JButton("b4");
public JButton b5 = new JButton("b5");
public JButton b6 = new JButton("b6");
public JButton b7 = new JButton("b7");
public JButton b8 = new JButton("b8");
public JButton b9 = new JButton("b9");
JogoVelha jogoVelha = new JogoVelha();
public void setarListener()
{
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
}
public void adicionarViewButtons()
{
getContentPane().add(b1);
getContentPane().add(b2);
getContentPane().add(b3);
getContentPane().add(b4);
getContentPane().add(b5);
getContentPane().add(b6);
getContentPane().add(b7);
getContentPane().add(b8);
getContentPane().add(b9);
}
public void atribuirValorTabuleiro(String name)
{
switch(name)
{
case "b1":
jogoVelha.setTabuleiroValor(0, 0, jogadorValue);
break;
case "b2":
jogoVelha.setTabuleiroValor(0, 1, jogadorValue);
break;
case "b3":
jogoVelha.setTabuleiroValor(0, 2, jogadorValue);
break;
case "b4":
jogoVelha.setTabuleiroValor(1, 0, jogadorValue);
break;
case "b5":
jogoVelha.setTabuleiroValor(1, 1, jogadorValue);
break;
case "b6":
jogoVelha.setTabuleiroValor(1, 2, jogadorValue);
break;
case "b7":
jogoVelha.setTabuleiroValor(2, 0, jogadorValue);
break;
case "b8":
jogoVelha.setTabuleiroValor(2, 1, jogadorValue);
break;
case "b9":
jogoVelha.setTabuleiroValor(2, 2, jogadorValue);
break;
default:
break;
}
}
@Override
public void actionPerformed(ActionEvent e) {
turnos ++;
lblTurnoNumber.setText(turnos.toString());;
if(turnos == 10)
{
JOptionPane.showMessageDialog(null, "Empate");
}
else
{
if(jogadorValue == 1)
{
setEnabled(false);
atribuirValorTabuleiro(((JButton)e.getSource()).getText());
((JButton) e.getSource()).setText("X");
((JButton) e.getSource()).revalidate();
if(turnos >=5)
{
jogoVelha.verificarPartida(jogoVelha.getTabuleiro(), jogadorValue);
JOptionPane.showConfirmDialog(null, "Vencedor é: " + jogoVelha.jogadores(jogadorValue), "Vencedor", 3, 4);
}
jogadorValue ++;
}
else
{
atribuirValorTabuleiro((((JButton)e.getSource()).getText()));
((JButton) e.getSource()).setText("O");
((JButton) e.getSource()).revalidate();
if(turnos >=5)
{
jogoVelha.verificarPartida(jogoVelha.getTabuleiro(), jogadorValue);
JOptionPane.showConfirmDialog(null, "Vencedor é: " + jogoVelha.jogadores(jogadorValue), "Vencedor", 3, 4);
}
jogadorValue --;
}
}
}
public View()
{
getContentPane().add(lblJogoVelha);
getContentPane().add(lblTurno);
getContentPane().add(lblTurnoNumber);
this.adicionarViewButtons();
this.setarListener();
setLayout(new GridLayout(4, 3));
lblTurnoNumber.setText(turnos.toString());
setSize(500, 500);
setVisible(true);
}
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
View tela = new View();
tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
tela.setVisible(true);
}
});
}
}