JLabel(或任何其他JComponent),当您调用setText()
方法时,其值发生了更改,但UI中的外观需要稍后更新。(通过EDT?)
如果你阻止了EDT,整个画面就会冻结。所以我的问题是,我很高兴"冻结"效应阻止了更多的行动。然而,我希望我的标签和其他输出组件不断更新。因此,我正在寻找一种手动更新组件外观的方法。在java API中,我发现了updateUI()
,它似乎并不有用。
如果你知道任何可以像一样的方法
label.setText("thanks!");
label.update();
请告诉我,我会非常感激的。
不要冻结Swing事件线程,周期。当你这样做时,它无法执行任何任务,如绘制和用户交互,如果它不绘制,无论你尝试什么,它都不会更新。就这么简单。
有没有一种方法可以实时和手动更新JLabel文本?
不,在EDT上做。
步骤2)像往常一样,通过调用setText来更新标签。
这就是我将JLabel设置为随时间更新的方式&日期
SimpleDateFormat SimpleDay = new SimpleDateFormat("EEEE");
SimpleDateFormat SimpleDate = new SimpleDateFormat("dd MMMM yyyy");
SimpleDateFormat SimpleTime = new SimpleDateFormat("H:mm:ss");
Timer SimpleTimer = new Timer(1000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
jLabel1.setText(SimpleDay.format(new Date()));
jLabel2.setText(SimpleDate.format(new Date()));
jLabel3.setText(SimpleTime.format(new Date()));
}
});
SimpleTimer.start();
然后将其添加到您的主类中,jlabel1/2/3将随计时器更新。