Java Stopwatch that updates the GUI every second?

后端 未结 1 1532
醉话见心
醉话见心 2020-12-21 00:18

I\'m a Java beginner and I\'m trying to build a simple stopwatch program that displays the time on a swing GUI. Making the stopwatch is easy, however I cannot find a way to

相关标签:
1条回答
  • 2020-12-21 01:03

    Something along these lines should do it:

    import java.awt.EventQueue;
    import java.util.Timer;
    import java.util.TimerTask;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    /** @see https://stackoverflow.com/a/11058263/230513 */
    public class Clock {
    
        private Timer timer = new Timer();
        private JLabel timeLabel = new JLabel(" ", JLabel.CENTER);
    
        public Clock() {
            JFrame f = new JFrame("Seconds");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.add(timeLabel);
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
            timer.schedule(new UpdateUITask(), 0, 1000);
        }
    
        private class UpdateUITask extends TimerTask {
    
            int nSeconds = 0;
    
            @Override
            public void run() {
                EventQueue.invokeLater(new Runnable() {
    
                    @Override
                    public void run() {
                        timeLabel.setText(String.valueOf(nSeconds++));
                    }
                });
            }
        }
    
        public static void main(String args[]) {
            EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    final Clock clock = new Clock();
                }
            });
        }
    }
    

    The timeLabel will always display the number of seconds the timer has been running.

    1. You will need to correctly format it to display "hh:mm:ss"; one approach is shown here.

    2. Create a container and add the label to it so that you can display it as part of the GUI.

    3. Compare the result to this alternate using javax.swing.Timer.

    0 讨论(0)
提交回复
热议问题