import java.awt.*;
import java.awt.Point;
import java.awt.event.*;
import java.lang.reflect.InvocationTargetException;
import java.util.Random;

import javax.swing.*;


/**
 * @author Remi Forax
 *
 */
public class CoordinateMain {

  public static void main(String[] args) {
    
    final DefaultCoordinateModel model=new DefaultCoordinateModel();
    for(int i=0;i<10;i++)
      model.add(new Point(i*10,100-i*10));
    
    CoordinateView view=new CoordinateView(model);
    
    final JButton button=new JButton("Start");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        button.setEnabled(false);
        
        final int count=model.getPointsCount();
        
        Thread thread=new Thread() {
          public void run() {
            try {
              
              for(int i=0;i<count;i++) {
                
                Thread.sleep(200);
                
                final Point point=new Point(
                  random.nextInt(200),
                  random.nextInt(200)
                  );
                
                final int index=i;
                EventQueue.invokeLater(new Runnable() {
                  public void run() {
                    model.setPoint(index, point);
                  }
                });
              }
              
              EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                  button.setEnabled(true);
                }
              });
            } catch (InterruptedException e) {
              e.printStackTrace();
            } catch (InvocationTargetException e) {
              e.printStackTrace();
            }
          }
          private final Random random=new Random();
        };
        thread.start();
      }
    });
    
    JFrame frame=new JFrame();
    frame.getContentPane().add(view);
    frame.getContentPane().add(button,BorderLayout.SOUTH);
    frame.setSize(400,300);
    frame.show();
  }
}
