首页 > 解决方案 > JLabel 不会更新,使用定时器每 3 秒更新一次时间

问题描述

我正在创建一个倒数计时器,并使用带有 JFrame 的 GUI。我正在尝试使用 label.setText(text); 函数,虽然我知道 Java 是编译的,但我认为使用计时器会用我拥有的代码每 3 秒更新一次。请问有什么帮助吗?我想更新 setText 但它在我的代码中没有这样做,我必须重新运行代码,这基本上意味着我的代码不起作用。

我试过调整我的 while 循环和其他语句,但我不知道出了什么问题。

    int currentDay = now.getDayOfMonth(); 
    int currentHour = now.getHour();
    int currentMinute = now.getMinute();
    int currentSecond = now.getSecond();


JLabel lblMinutesLeft = new JLabel("Minutes Left: "+ (60-currentMinute));
    lblMinutesLeft.setFont(new Font("Tahoma", Font.PLAIN, 20));
    lblMinutesLeft.setHorizontalAlignment(SwingConstants.CENTER);
    lblMinutesLeft.setBounds(125, 488, 160, 74);
    contentPane.add(lblMinutesLeft);

    JLabel lblSecondsLeft = new JLabel("Seconds Left: " + (60-currentSecond));
    lblSecondsLeft.setFont(new Font("Tahoma", Font.PLAIN, 18));
    lblSecondsLeft.setHorizontalAlignment(SwingConstants.CENTER);
    lblSecondsLeft.setBounds(106, 573, 150, 50);
    contentPane.add(lblSecondsLeft);

    Timer timer = new Timer();
     TimerTask tt = new TimerTask() {
            public void run() {
                while (currentDay != 10) {
                    lblMinutesLeft.setText("Minutes Left: "+ (60-currentMinute));
                    lblSecondsLeft.setText("Seconds Left: " + (60-currentSecond));
                }
            }
        };
        timer.schedule(tt, 1000, 3000);

输出应该每 3 秒更新一次(60 - currentNum of seconds into the minute)并且与分钟相同,依此类推。

我的 GUI 上的输出没有改变。

标签: javaswingjlabeltimertask

解决方案


推荐阅读