Java 单击并更改JLabel图标后等待一秒钟
我正在开发我的第一个Swing应用程序。这是一种使用扑克牌的记忆游戏 我使用Java 单击并更改JLabel图标后等待一秒钟,java,swing,icons,delay,jlabel,Java,Swing,Icons,Delay,Jlabel,我正在开发我的第一个Swing应用程序。这是一种使用扑克牌的记忆游戏 我使用JLabels模拟卡,并设置正面和背面的图标。每张卡都有一个MouseListener,当用户单击时,我会检查两张卡是否相同。如果它们不是同一张卡,我想将这两张卡显示一到两秒钟,在延迟后,将图标更改回原来的位置 我试着使用sleep,wait,invokeLater,invokeAndWait。。。但什么都不管用 这是我的主要课程: public class Main { public static void
JLabel
s模拟卡,并设置正面和背面的图标。每张卡都有一个MouseListener
,当用户单击时,我会检查两张卡是否相同。如果它们不是同一张卡,我想将这两张卡显示一到两秒钟,在延迟后,将图标更改回原来的位置
我试着使用sleep
,wait
,invokeLater
,invokeAndWait
。。。但什么都不管用
这是我的主要课程:
public class Main {
public static void main(String[] args) throws FontFormatException, IOException {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
MyApp window = new MyApp();
} catch ( FontFormatException | IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
}
MyApp
继承自JFrame
。在其中,我将所有卡添加到一个面板:
while ( cont < cardsInGame.size() ){
this.cardsInGame.get(cont).setBounds(x, y, 100, 140);
panelTablero.add(cardsInGame.get(cont));
cardsInGame.get(cont).addMouseListener(this);
x = x+108+5;
if ( (cont+1)%8 == 0 && cont != 0){
y = y+140+15;
x = 53;
}
cont++;
}
如果在我的代码中调用JOptionPane.showMessageDialog(vp,“Wait”)
,一切都会正常工作。图标被刷新,然后等待对话框OK。否则,图标将永远不会刷新(或速度极快且不显示)
我怎样才能增加这个延迟呢?你有没有试过在这里面放一个therad
Runnable r = new Runnable() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
Thread asd = new Thread(r);
asd.start();
使用摆动计时器。当定时器启动时,你会重置图标。同时,作为一个可能的例子,谢谢你的程序员。这个例子非常适合我。我已经尝试在我的应用程序,它的工作<代码>线程睡眠(2000)代码>不要阻止EDT(事件调度线程)-发生这种情况时,GUI将“冻结”。不要调用
Thread.sleep(n)
为重复任务执行Swing计时器,或为长时间运行的任务执行SwingWorker
。有关更多详细信息,请参阅。如注释中链接的两个示例所示;)
Runnable r = new Runnable() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
Thread asd = new Thread(r);
asd.start();