有没有一种方法可以实时和手动更新JLabel文本



JLabel(或任何其他JComponent),当您调用setText()方法时,其值发生了更改,但UI中的外观需要稍后更新。(通过EDT?)

如果你阻止了EDT,整个画面就会冻结。所以我的问题是,我很高兴"冻结"效应阻止了更多的行动。然而,我希望我的标签和其他输出组件不断更新。因此,我正在寻找一种手动更新组件外观的方法。在java API中,我发现了updateUI(),它似乎并不有用。

如果你知道任何可以像一样的方法

label.setText("thanks!");
label.update(); 

请告诉我,我会非常感激的。

不要冻结Swing事件线程,周期。当你这样做时,它无法执行任何任务,如绘制和用户交互,如果它不绘制,无论你尝试什么,它都不会更新。就这么简单。

有没有一种方法可以实时和手动更新JLabel文本?

不,在EDT上做。

步骤1)不要阻塞事件调度线程
步骤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将随计时器更新。

最新更新