SwingWorker, Thread.sleep () ou javax.swing.timer? Eu preciso "inserir uma pausa"
Eu estou trabalhando em um jogo de memória e eu quero configurá-lo, então eu clico no primeiro"card"
, em seguida, o segundo e se eles não são os mesmos a segunda carta mostra por alguns segundos, então eles voltam para o"non-flipped"
posição.
Eu tentei usarSwingWorker
, Thread.sleep
eSwingTimer
mas eu não consigo fazer isso funcionar. ComThread.sleep
o segundo cartão não vai"flip"
se for uma duplicata, aguarda a quantidade de tempo de espera e desaparece. Se não for um jogo, ele espera "virado para baixo" e, após o temporizador, a primeira carta volta. Isso acontece independentemente de onde eu coloco o Thread.sleep.
ComSwing Timer
parece apenas "alterar o temporizador" enquanto estou interagindo com as cartas, então acabo lançando 8 cartas antes de serem ativadas.
Eu não tive sorte comSwingWorker
e nem tenho certeza de que funcionará para o que estou procurando.
Este é o código que tenho:
class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
for(int index = 0; index < arraySize; index++)
{
if(button[index] == e.getSource())
{
button[index].setText(String.valueOf(cards.get(index)));
button[index].setEnabled(false);
number[counter]=cards.get(index);
if (counter == 0)
{
counter++;
}
else if (counter == 1)
{
if (number[0] == number[1])
{
for(int i = 0; i < arraySize; i++)
{
if(!button[i].isEnabled())
{
button[i].setVisible(false);
}
}
}
else
{
for(int i = 0; i < arraySize; i++)
{
if(!button[i].isEnabled())
{
button[i].setEnabled(true);
button[i].setText("Card");
}
}
}
counter = 0;
}
}
}
}
}
Basicamente, o que eu preciso é que este código seja executado quando o contador == 1 e o cartão não for compatível:
button[index].setText(String.valueOf(cards.get(index)));
button[index].setEnabled(false);
Então uma pausa para que ocard is revealed
por esse tempo, e finalmente retoma a devolução do cartão para sua posição voltada para baixo.
Isso é o que eu tentei comThread.sleep()
:
class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
for(int index = 0; index < arraySize; index++)
{
if(button[index] == e.getSource())
{
button[index].setText(String.valueOf(cards.get(index)));
button[index].setEnabled(false);
number[counter]=cards.get(index);
if (counter == 0)
{
counter++;
}
else if (counter == 1)
{
if (number[0] == number[1])
{
for(int i = 0; i < arraySize; i++)
{
if(!button[i].isEnabled())
{
button[i].setVisible(false);
}
}
}
else
{
try
{
Thread.sleep(800);
}
catch (InterruptedException e1)
{
e1.printStackTrace();
}
for(int i = 0; i < arraySize; i++)
{
if(!button[i].isEnabled())
{
button[i].setEnabled(true);
button[i].setText("Card");
}
}
}
counter = 0;
}
}
}
}
}
Agradecemos antecipadamente por qualquer conselho