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

questionAnswers(1)

yourAnswerToTheQuestion