import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class BlinkingLight implements ActionListener {

    JFrame frame;
    JButton startStop ; 

    public BlinkCanvas blinkCanvas ;
    
    public BlinkingLight() {
	frame = new JFrame();
	//frame.getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
	startStop = new JButton("Start");
	frame.getContentPane().add(startStop, BorderLayout.NORTH);
	startStop.addActionListener(this);
	blinkCanvas = new BlinkCanvas();
	frame.getContentPane().add(blinkCanvas, BorderLayout.CENTER);
	frame.setSize(500,400);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setVisible(true);
    }

    public static void main(String[] args) {
	BlinkingLight bl = new BlinkingLight();
	Runnable blinkRunnable = new BlinkRunnable(bl.blinkCanvas);
	Thread t = new Thread(blinkRunnable);
	t.start();
    }
    
    public void actionPerformed(ActionEvent e){
	blinkCanvas.setBlinking(!blinkCanvas.isBlinking());
	if (blinkCanvas.isBlinking())
	    startStop.setLabel("Stop"); 
	else 
	    startStop.setLabel("Start");
    }
}


class BlinkRunnable implements Runnable {
    public BlinkRunnable(BlinkCanvas blinkCanvas) {
	this.blinkCanvas = blinkCanvas;
    }
    
    public void run() {
	while(true) {
	    if(blinkCanvas.isBlinking()) {
		blinkCanvas.toggleColor(); 
	    }
	    try {
		Thread.sleep(1000);
	    } catch (InterruptedException e) {}
	}
    }
    
    BlinkCanvas blinkCanvas;
}


class BlinkCanvas extends JPanel {
    public BlinkCanvas(){
	setSize(500,350); 
    }
 
    public void paintComponent(Graphics g) {
	g.setColor(theColor);
	int rect_width = 50;
	int rect_height = 50;
	g.fillOval((getWidth()-rect_width)/2, (getHeight()-rect_height)/2, rect_width, rect_height);
    }
    
    public boolean isBlinking() { return blinking; }
    
    public void setBlinking(boolean blinking) {
	this.blinking = blinking; 
    }
    
    public void toggleColor() {
	theColor = (theColor == Color.ORANGE) ? getBackground() : Color.ORANGE;
	repaint();
    }
    
    private Color theColor = Color.ORANGE; 
    private boolean blinking = false;
}
