有没有办法实时和手动更新JLabel文本?

时间:2013-12-01 04:00:52

标签: java swing event-dispatch-thread

JLabel(或任何其他JComponents),当您调用setText()方法时,其值已更改,但UI中的外观需要稍后更新。 (美国东部时间?)

如果你阻止了EDT,那么整个框架会冻结。所以我的问题是,我对'冻结'效果感到满意,这会阻止任何更多的动作发送。但是我希望我的标签和其他输出组件不断更新。因此,我正在寻找一种手动更新组件外观的方法。在java API中,我发现updateUI()似乎没用。

如果你知道任何类似

的方法
label.setText("thanks!");
label.update(); 

请告诉我。我将非常感激。

4 个答案:

答案 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。