[英]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.