我不知道如何在停止时显示计时器

时间:2016-03-01 03:44:37

标签: java user-interface timer formula

你们都好吗?我的代码有点问题。当我停止我的计时器程序时,它会说"完成!"因为我将它设置为" Done",但我想显示剩余时间而不是单词" Done"。例如,如果我原始时间设置为4000秒并且我在3000秒停止,我想显示当前时间,即停止时的3000而不是单词"完成"。你能帮助我吗?我真的很感激。

这是我的代码:

import java.awt.event.*;
import java.awt.*;

import javax.swing.*;
public class CountdownTimer extends JFrame  {

    JLabel promptLabel, timerLabel;
    int counter;
    JLabel tf;
    JButton button;
    Timer timer;


    public static void main(String args[]) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new CountdownTimer();
            }

        });

    }


    public CountdownTimer() {

        JFrame lt = new JFrame();
            lt.getContentPane().setBackground(new Color(0, 102, 153));
            lt.setBounds(100, 100, 450, 300);
            lt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            lt.getContentPane().setLayout(null);
            lt.setVisible(true);

        promptLabel = new JLabel("Time: ", SwingConstants.CENTER);
        promptLabel.setFont(new Font("Modern No. 20", Font.BOLD, 17));
        promptLabel.setBounds(21, 30, 210, 30);
        lt.add(promptLabel);

        tf = new JLabel("4000");
        tf.setBounds(160, 36, 40, 20);
        lt.add(tf);

        button = new JButton("Start");
        button.setFont(new Font("Modern No. 20", Font.BOLD, 11));
        button.setBounds(299, 37, 89, 23);
        lt.add(button);

        JButton btnLogout = new JButton("LOGOUT");

        btnLogout.setBackground(new Color(112, 128, 144));
        btnLogout.setFont(new Font("Trajan Pro", Font.BOLD, 17));
        btnLogout.setBounds(149, 189, 121, 36);
        btnLogout.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                 String sbutt = e.getActionCommand();

                 if(sbutt.equals("LOGOUT")) {


                     long current = counter;
                     long elapsed = current - counter;

                        timer.stop();
                        timerLabel.setText("Done!");
                        Toolkit.getDefaultToolkit().beep();
                        tf.setText(String.valueOf(elapsed));

                 }
            }
        });
        lt.getContentPane().add(btnLogout);

        timerLabel = new JLabel("Waiting...", SwingConstants.CENTER);
        timerLabel.setFont(new Font("Modern No. 20", Font.BOLD, 17));
        timerLabel.setBounds(119, 97, 176, 62);
        lt.getContentPane().add(timerLabel);

        event e =  new event();
        button.addActionListener(e);
    }
    public void actionPerformed(ActionEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public void run() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    public class event implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            int count = (int)(Double.parseDouble(tf.getText()));
            timerLabel.setText("Time left: " + count);
            TimeClass tc = new TimeClass(count);
            timer = new Timer(1000, tc);
            timer.start();
        }
    }
    public class TimeClass implements ActionListener {
        int counter;
        public TimeClass(int counter) {
            this.counter= counter;
   }
        public void actionPerformed(ActionEvent tc) {
            counter--;
            if(counter >= 1) {
                timerLabel.setText("Time left: " + counter);
            }
            else {
                timer.stop();
                timerLabel.setText("Done!");
                Toolkit.getDefaultToolkit().beep();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

  

但我想显示剩余时间而不是“完成”一词。

$query = $_SERVER['QUERY_STRING']; parse_str($query, $arr); foreach($arr as $key => $value){ // $key will be the checkbox id, $value will be true or false ... } 更改为timerLabel.setText("Done!");

我应该指出,由于它的性质,Swing timerLabel.setText(counter);并不完全准确,你应该关注已经过去的时间量而不是定时器被调用的频率。这当然完全取决于你想要计数的准确程度,但值得了解(恕我直言)

Timer

Timer