SwingWorker, Thread.sleep () lub javax.swing.timer? Muszę „wstawić pauzę”
Pracuję nad grą pamięci i chcę ją skonfigurować, więc klikam pierwszą"card"
, następnie druga i jeśli nie są takie same, jak druga karta pokazuje się przez kilka sekund, wracają do"non-flipped"
pozycja.
Próbowałem użyćSwingWorker
, Thread.sleep
iSwingTimer
ale nie mogę go uruchomić. ZThread.sleep
druga karta się nie przyzwyczaje"flip"
jeśli jest to duplikat, czeka czas snu i znika. Jeśli nie jest to mecz, czeka „zakryty”, a po wyłączniku czasowym pierwsza karta się odwraca. Dzieje się tak niezależnie od miejsca, w którym umieściłem Thread.sleep.
ZSwing Timer
wydaje się, że „zmienia zegar” podczas interakcji z kartami, więc w końcu rzucam 8 kart, zanim się uaktywni.
Nie miałem szczęściaSwingWorker
i nie jestem nawet pewien, czy zadziała to, czego szukam.
To jest kod, który mam:
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;
}
}
}
}
}
Zasadniczo potrzebuję tego kodu do wykonania, gdy licznik == 1, a karta nie jest zgodna:
button[index].setText(String.valueOf(cards.get(index)));
button[index].setEnabled(false);
Potem przerwa, więccard is revealed
na ten czas, a na koniec wznawia powrót karty do pozycji zakrytej.
To właśnie próbowałemThread.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;
}
}
}
}
}
Z góry dziękuję za wszelkie porady