    import javax.swing.JFrame;
     
    ///driver class
    public class Stopwatch
    {
        public static void main(String[] args)
        {
            JFrame frame = new JFrame("Stopwatch 9.10 Haris Cengic");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            frame.getContentPane().add(new StopWatchPanel());
            frame.pack();
            frame.setVisible(true);
        }
     
    };
     
     
    //--------------------------------------------------------------//
     
    import javax.swing.JPanel;
    import javax.swing.JButton;
     
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.JLabel;
    import javax.swing.Timer;
     
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Dimension;
    import java.awt.Graphics;
     
     
    public class StopWatchPanel extends JPanel
    {
        private final int START = 100; //START will be set to 100, keeps the timer accurate
        private final int WIDTH = 500, HEIGHT = 110; //size of jpanel
        private final int SIZE = 80; // size of the font for the stopwatch
     
        private int second; //shows the current second
     
        private boolean hasstarted; //check if the timer is running
     
        private Timer timer; //new timer
     
        private JButton start, stop, clear; //buttons
     
        private JLabel time; //shows the time in seconds
     
        public StopWatchPanel()
        {
            timer = new Timer(START, new TimerListener());
     
            second = 0;
            hasstarted = true; //set the time to 0 and start the timer
     
            start = new JButton("Start");//new button for start option
            start.addActionListener(new ButtonListener());
     
            clear = new JButton("Clear");//new button for clear
            clear.addActionListener(new ButtonListener());
     
            time = new JLabel("0.0");
            time.setFont(new Font("Arial", Font.ITALIC, SIZE));
     
            add(start);
            add(clear);
            add(time);
     
            setPreferredSize(new Dimension(WIDTH, HEIGHT));
            setBackground(Color.red);
        }
     
        public final void paintComponent(Graphics page)
        {
            super.paintComponent(page); //super.paintCompenent invokes paintComponent and it overwrites whatever is there
            final int milli = 10; //base 10, dividing second by 10 and %10 to display the time in seconds AND milliseconds
            time.setText("    " + second / milli + "."  + second % milli + "  ");
        }
     
        private class ButtonListener implements ActionListener
        {
          //this class tells if the timer is running and based
        	//on that changes the button from 'start' to 'stop'
        	//also it defines what 'clear' does
            public void actionPerformed(ActionEvent event)
            {
     
                if (event.getSource() == start)
                {
                    if (hasstarted)
                    {
                        hasstarted = false;
                        timer.start();
                        start.setText("Stop"); 
                    } else
                    {
                        hasstarted = true;
                        timer.stop();
                        start.setText("Start");
                    }
                } else if (event.getSource() == clear)
                {
                    second = 0;
                    hasstarted = true;
                    timer.stop();
                    start.setText("Start");
                }
                repaint();
            }
        }
     
        private class TimerListener implements ActionListener
        {
     
            public void actionPerformed(ActionEvent event)
            {
                second++;
                repaint();
            }
        }
    }
     
    //----------------------------------------------------------------------------//