需要一个定时 panel.repaint();

Posted

技术标签:

【中文标题】需要一个定时 panel.repaint();【英文标题】:Need a timed panel.repaint(); 【发布时间】:2020-04-03 06:40:23 【问题描述】:

我希望我的代码绘制一个面板,等待 1 秒。通过执行函数 nextGen() 编辑面板;并重新粉刷面板。我希望这个功能发生 5 次。问题是,每次我尝试使用 thread.sleep() 进行 try/catch 操作时,它都会“跳过”重绘,nextGen();和睡觉。请帮忙!

button3.addActionListener(new ActionListener() 
            @Override
            public void actionPerformed(ActionEvent arg0) 
                for(int i = 0;i<5;i++) 
                    try 
                        Thread.sleep(1000);
                        nextGen();
                        panel.repaint();
                     catch (InterruptedException e) 
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    
                
                //System.exit(0);
            
        );

【问题讨论】:

使用 Swing Timer ***.com/a/182422/85421 ; ***.com/a/14074427/85421 ; ***.com/a/7217210/85421 ; ***.com/q/16404023/85421 ; ... 【参考方案1】:

使用 Swing Timer...

Timer timer = new Timer(1000, new ActionListener() 
    private int count;
    @Override
    public void actionPerformed(ActionEvent evt) 
        nextGen();
        panel.repaint();
        count++;
        if (count >= 5) 
            ((Timer)evt.getSource()).stop();
        
    
);
timer.start();

请参阅Concurrency in Swing 了解有关您遇到此特定问题的原因的更多信息,请参阅How to Use Swing Timers 了解有关 Swing 的更多详细信息Timer

【讨论】:

:/ 你忘记导入javax.swing.Timer了吗?您是否阅读了链接的文档?你看过链接的例子吗? 非常感谢,真的很有帮助!但是如果我要让它成为一个开始/停止按钮,我该怎么做呢? 您需要将Timer 引用为实例字段,以便可以在较大范围内访问我。然后您可以根据需要简单地拨打start/stop 我还是不太明白。 For example

以上是关于需要一个定时 panel.repaint();的主要内容,如果未能解决你的问题,请参考以下文章

内核线程软中断和定时器有何区别

内核线程软中断和定时器有何区别

C#WinForm如何定时处理作业执行的作业管理器

Golang 定时器

STM32F4一个主定时器触发两个从属时间

SIMATIC S7-1200的指令系统主要包括哪些指令?