如何在Swing中更新JLabel?

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

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

但我认为我需要“强制”我的窗口“更新”自己(显示存储在“myMessage”中的新值)。

我建议你每次更新内容时调用JLabel#setText方法。 但是,由于Swing具有非常单一的特性,您必须在所谓的事件调度线程(EDT)中更新其小部件。 为此,请考虑在计时器代码中调用SwingUtilities.invokeLaterSwingUtilities.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()); } 

我不知道你的class级和结构。但是我在我的一个任务中使用了这个解决方案。