【发布时间】:2013-04-23 22:29:08
【问题描述】:
我正在做一个记忆游戏,我想设置它,所以我点击第一个"card",然后点击第二个,如果它们不一样,第二张卡片会显示几秒钟,然后他们会返回到"non-flipped" 位置。
我尝试使用SwingWorker、Thread.sleep 和SwingTimer,但我无法让它工作。使用Thread.sleep 第二张卡不会"flip" 如果它是重复的,它会等待睡眠时间并消失。如果它不匹配,它会等待“面朝下”,并且在睡眠计时器之后,第一张卡会翻转回来。无论我将 Thread.sleep 放在哪里,都会发生这种情况。
使用Swing Timer,它似乎只会在我与卡片互动时“更改计时器”,所以我最终在它激活之前翻转了 8 张卡片。
SwingWorker 我没有运气,我什至不确定它是否能满足我的需求。
这是我的代码:
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;
}
}
}
}
}
基本上我需要的是在计数器 == 1 并且卡片不匹配时执行此代码:
button[index].setText(String.valueOf(cards.get(index)));
button[index].setEnabled(false);
然后暂停,所以 card is revealed 在那段时间,最后它恢复将卡返回到其面朝下位置。
这是我尝试使用Thread.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;
}
}
}
}
}
提前感谢您的任何建议
【问题讨论】:
-
如果您使用的是
Thread.sleep(),请确保您没有在事件调度线程上休眠 -
为此使用 Swing
Timer。为了尽快获得更好的帮助,请发帖SSCCE。 -
我用错了Swing Timer,终于成功了,呵呵。还是谢谢你。
标签: java swing user-interface