SwingWorker, Thread.sleep () oder javax.swing.timer? Ich muss eine Pause einfügen

Ich arbeite an einem Memory-Spiel und möchte es einrichten, also klicke ich auf das erste"card", dann die zweite und wenn sie nicht gleich sind, zeigt die zweite Karte für ein paar Sekunden, dann kehren sie zum zurück"non-flipped" Position.

Ich habe versucht mitSwingWorker, Thread.sleep undSwingTimer aber ich kann es nicht zum Laufen bringen. MitThread.sleep die zweite Karte wird nicht"flip" Wenn es sich um ein Duplikat handelt, wartet es auf die Dauer des Ruhezustands und verschwindet. Wenn es nicht passt, wartet es "verdeckt" und nach dem Sleep-Timer dreht sich die erste Karte zurück. Dies geschieht unabhängig davon, wo ich den Thread.Sleep platziere.

MitSwing Timer Es scheint nur "den Timer zu ändern", während ich mit den Karten interagiere, sodass ich 8 Karten umdrehe, bevor sie aktiviert werden.

Ich hatte kein Glück mitSwingWorker und ich bin mir nicht mal sicher, ob es für das, wonach ich suche, funktionieren wird.

Dies ist der Code, den ich habe:

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

Grundsätzlich brauche ich, damit dieser Code ausgeführt wird, wenn der Zähler == 1 ist und die Karte nicht übereinstimmt:

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

Dann eine Pause so dascard is revealed Danach kehrt die Karte wieder in die verdeckte Position zurück.

Damit habe ich es versuchtThread.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;
                    }
                }
            }
        }
    }

Vielen Dank im Voraus für jeden Rat

Antworten auf die Frage(1)

Ihre Antwort auf die Frage