Rom*_*man 4 java user-interface swing timer
我正在尝试使用Swing Timer,我想从一个非常简单的程序开始.我有一个带文字的窗口:"你有n秒",其中n每秒从10变为0.
我知道如何生成一个带文本的窗口.我理解Timer如何工作(它会定期启动一个动作).但我无法弄清楚如何梳理这两件事.我应该使用它:JLabel label = new JLabel(myMessage);
然后使用计时器我需要更新"myMessage"变量吗?
但我想我需要"强制"我的窗口"更新"自己(显示存储在"myMessage"中的新值).
我建议你JLabel#setText
每次更新内容时都要调用该方法.但是,由于Swing具有非常单一的特性,您必须在所谓的事件调度线程(EDT)中更新其小部件.为此,请考虑呼叫SwingUtilities.invokeLater
或SwingUtilities.invokeAndWait
在您的计时器代码中.
这样,当由于调用setText而更改文本时,JLabel的事件将正确传播,并且将正确刷新标签.
嗨兄弟使用观察者模式。也就是说,你的 ui 类应该是你的计时器结构的监听器。当你的变量发生变化时,调用你的计时器的监听器,它是你的 ui 类。
//your observer class
update(Object obj){
label.setText(obj.toString());
}
...
//your observable class
//when timer changes varible's value you should call invokeListeners()
invokeListener(){
for(Listener listener :listeners)
listener.update(getSecond());
}
Run Code Online (Sandbox Code Playgroud)
我不知道你的班级和结构。但我在我的一项作业中使用了这个解决方案。