单击图像时,我希望显示另一个图像暂停一秒钟,然后再次显示要恢复和显示的原始图像当我尝试这样做时,动作处理程序(如下面给出的代码)会在睡眠后设置图像。我希望暂停显示图像,再次显示原始图像,我该如何实现
private void jButton16ActionPerformed(java.awt.event.ActionEvent evt) {
jButton16.setIcon(new javax.swing.ImageIcon("C:\\Users\\x\\Documents\\O.png"));
try { //sleep 1 seconds
Thread.sleep(1000);
}
catch (InterruptedException e)
{
}
jButton16.setIcon(new javax.swing.ImageIcon("C:\\Users\\x\\Documents\\118px-AMIGO.jpg")); }
答案 0 :(得分:2)
你永远不应该在Event Dispatch Thread内调用Thread.sleep()
因为Thread.sleep()
会阻止事件调度线程,而您的用户界面将会冻结,而您可以使用Timer来实现目标
参考下面的代码,
jButton16.setIcon(new javax.swing.ImageIcon("C:\\Users\\x\\Documents\\O.png"));
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jButton16.setIcon(new javax.swing.ImageIcon("C:\\Users\\x\\Documents\\118px-AMIGO.jpg"));
}
});
timer.setRepeats(false);
timer.start();
答案 1 :(得分:2)
解决问题的最简单方法是使用Swing Timer
private void jButton16ActionPerformed(java.awt.event.ActionEvent evt) {
jButton16.setIcon(new javax.swing.ImageIcon("C:\\Users\\x\\Documents\\O.png"));
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton16.setIcon(new javax.swing.ImageIcon("C:\\Users\\x\\Documents\\118px-AMIGO.jpg"));
}
});
timer.setRepeats(false);
timer.start();
}
有关详细信息,请参阅Concurrency in Swing和How to use Swing Timers