JLabel(或任何其他JComponents),当您调用setText()
方法时,其值已更改,但UI中的外观需要稍后更新。 (美国东部时间?)
如果你阻止了EDT,那么整个框架会冻结。所以我的问题是,我对'冻结'效果感到满意,这会阻止任何更多的动作发送。但是我希望我的标签和其他输出组件不断更新。因此,我正在寻找一种手动更新组件外观的方法。在java API中,我发现updateUI()
似乎没用。
如果你知道任何类似
的方法label.setText("thanks!");
label.update();
请告诉我。我将非常感激。
答案 0 :(得分:3)
不要冻结Swing事件线程,句点。当你这样做时,它无法执行任何任务,例如绘画和用户交互,如果它没有画画,无论你怎么做,它都不会更新。就这么简单。
答案 1 :(得分:2)
有没有办法实时和手动更新JLabel文本?
不,在美国东部时间做。
答案 2 :(得分:1)
步骤1)不要阻止事件派遣线程 步骤2)通过调用setText来照常更新标签。
答案 3 :(得分:0)
这就是我将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。