繁体   English   中英

为什么setText对JLabel组件不起作用?

[英]Why doesn't setText work for JLabel component?

我有一个要随时更改的JLabel ,这是我编写的代码:

infoLabel.setText("Added");
try {
   TimeUnit.MILLISECONDS.sleep(300);
}
catch(InterruptedException ex)
{
}

infoLabel.setText("Action"); //funny part is when I comment this line it works

标签的默认文本是“操作”

Swing是一个单线程框架,这意味着,如果您执行任何停止该线程的操作,则它将无法响应任何新事件,包括绘画请求。

基本上, TimeUnit.MILLISECONDS.sleep(300)导致事件调度线程进入睡眠状态,从而阻止其处理任何新的绘制请求(以及其他操作)。

相反,您应该使用javax.swing.Timer

看一眼

更多细节

例如...

infoLabel.setText("Added");

Timer timer = new Timer(300, new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        infoLabel.setText("Action");
    }
});
timer.setRepeats(false);
timer.start();

注意,300毫秒是一个很短的时间,您可能希望以一个稍大的值开始,例如2000,即2秒;)

您正在休眠Swing事件线程,从而使整个GUI进入休眠状态。 不要那样做 请改用Swing计时器。

您的应用程序在单个线程上运行,因此当您使线程休眠时,可以防止它进行任何GUI更新。

您确定做事正确吗? 通过执行GUI线程中的所有操作(包括睡眠),它将始终很忙,并且永远不会回到Java上来重新绘制GUI。

搜索EDT(事件调度线程)以获取更多信息。 这是关于此主题的一个问题: 处理代码不起作用(线程,draw(),noLoop()和loop())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM