繁体   English   中英

Java中绘制两个图标之间的延迟

[英]Delay between drawing of two icons in Java

我有一段Java代码,可在屏幕上绘制2个图标。 我想在两者之间强制执行延迟,并且不确定最佳方法。

此刻我有;

cell.setIcon(image1);
Thread.sleep(500); // Ignored try() for brevity
cell2.setIcon(image2);

但这似乎会导致延迟绘制任何一个 为什么会这样,我该如何解决?

假设您正在使用Swing,则需要使睡眠在工作线程上执行,如下所示:

new SwingWorker<Void,Void>() {
    @Override
    protected Void doInBackground() throws Exception {
        Thread.sleep(500);
        return null;
    }
    @Override
    protected void done() {
        cell2.setIcon(image2);
    }
}.execute();

德文郡(Devon)对于如何提供最佳答案。 至于为什么,基本的问题是setIcon函数不包含重新绘制组件的代码。 流程如下所示:

1)您在GUI上单击某些内容
2)生成一个事件,Swing调用所有侦听器
3)您的代码被触发并运行,调用setIcon
4)您的代码完成运行,控制权返回到Swing
5)Swing喷涂任何新的/更改的组件等。

所有这些都发生在一个线程上。 您希望您的延迟发生在步骤3之后,但是您不想阻塞当前线程,因为这样直到延迟之后才执行步骤5。 Devon的解决方案使用SwingWorker将延迟放置在另一个线程上,因此不会阻塞步骤5。

我会使用Swing计时器。 当显示第一个图标时,您将启动计时器。 当计时器触发时,您将显示第二个图标。

阅读Swing教程中有关如何使用计时器的部分, 获取更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM