首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中绘制两个图标之间的延迟

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

Stack Overflow用户
提问于 2009-12-07 16:30:44
回答 3查看 1.3K关注 0票数 0

我在Java中有一段代码,它将两个图标绘制到屏幕上。我想在他们之间拖延一段时间,我不确定最好的办法。

现在我有了;

代码语言:javascript
复制
cell.setIcon(image1);
Thread.sleep(500); // Ignored try() for brevity
cell2.setIcon(image2);

但这似乎造成了拖延之前,两人都被抽签。为什么会这样,我该怎么解决呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-07 16:39:30

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

代码语言:javascript
复制
new SwingWorker<Void,Void>() {
    @Override
    protected Void doInBackground() throws Exception {
        Thread.sleep(500);
        return null;
    }
    @Override
    protected void done() {
        cell2.setIcon(image2);
    }
}.execute();
票数 4
EN

Stack Overflow用户

发布于 2009-12-07 17:13:09

德文有最好的答案。至于原因,基本问题是setIcon函数不包含重新绘制组件的代码。流程如下:

1)单击GUI上的某些内容

2)生成一个事件,Swing调用所有侦听器

3)代码被触发并运行,setIcon被调用

4)代码完成运行,控件返回到Swing

5) Swing油漆任何新的/更改的组件等。

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

票数 2
EN

Stack Overflow用户

发布于 2009-12-07 17:54:39

我会用秋千计时器。当显示第一个图标时,启动定时器。当计时器启动时,您将显示第二个图标。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1861123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档