如何在Swing中更新JLabel?

Rom*_*man 4 java user-interface swing timer

我正在尝试使用Swing Timer,我想从一个非常简单的程序开始.我有一个带文字的窗口:"你有n秒",其中n每秒从10变为0.

我知道如何生成一个带文本的窗口.我理解Timer如何工作(它会定期启动一个动作).但我无法弄清楚如何梳理这两件事.我应该使用它:JLabel label = new JLabel(myMessage);然后使用计时器我需要更新"myMessage"变量吗?

但我想我需要"强制"我的窗口"更新"自己(显示存储在"myMessage"中的新值).

Rid*_*del 7

我建议你JLabel#setText每次更新内容时都要调用该方法.但是,由于Swing具有非常单一的特性,您必须在所谓的事件调度线程(EDT)中更新其小部件.为此,请考虑呼叫SwingUtilities.invokeLaterSwingUtilities.invokeAndWait在您的计时器代码中.

这样,当由于调用setText而更改文本时,JLabel的事件将正确传播,并且将正确刷新标签.


ibr*_*maz 5

嗨兄弟使用观察者模式。也就是说,你的 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)

我不知道你的班级和结构。但我在我的一项作业中使用了这个解决方案。