SwingWorker, Thread.sleep () o javax.swing.timer? Necesito "insertar una pausa"

Estoy trabajando en un juego de memoria y quiero configurarlo, así que hago clic en el primero"card", luego la segunda y si no son lo mismo la segunda carta muestra por unos segundos luego regresan a la"non-flipped" posición.

Traté de usarSwingWorker, Thread.sleep ySwingTimer pero no puedo hacerlo funcionar. ConThread.sleep la segunda carta no"flip" si es un duplicado, espera la cantidad de tiempo de sueño y desaparece. Si no coincide, espera "boca abajo" y después del temporizador de reposo, la primera tarjeta retrocede. Esto sucede independientemente de donde coloque el Thread.sleep.

ConSwing Timer solo parece que "cambia el temporizador" cuando estoy interactuando con las tarjetas, así que termino de voltear 8 cartas antes de que se activen.

No he tenido suerte conSwingWorker y ni siquiera estoy seguro de que funcione para lo que estoy buscando.

Este es el código que tengo:

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

Básicamente, lo que necesito es que este código se ejecute cuando el contador == 1, y la tarjeta no coincida:

    button[index].setText(String.valueOf(cards.get(index)));
                    button[index].setEnabled(false);

Luego una pausa para que elcard is revealed durante ese tiempo, y finalmente se reanuda para devolver la tarjeta a su posición boca abajo.

Esto es lo que intenté conThread.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;
                    }
                }
            }
        }
    }

Gracias de antemano por cualquier consejo

Respuestas a la pregunta(1)

Su respuesta a la pregunta