import java.awt.Canvas;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class TestBallFrame extends Frame {
    Ball aBall;
    Thread ballThread;
    myWindowAdapter closeIt = new myWindowAdapter();
    
    class BallCanvas extends Canvas {
        Graphics bufferG;
        Image buffer;
        int oldX;
        int oldY;
        
        public BallCanvas(int width, int height) {
            setSize(width,height);
            setBackground(Color.cyan);
        }
        
        public void update(Graphics g) {
            // this illustrates double buffering
            if( buffer == null ) {
                buffer = createImage(getSize().width,getSize().height);
                bufferG = buffer.getGraphics();
            }
            oldX = aBall.getX();
            oldY = aBall.getY();
            bufferG.setColor(aBall.getColor());
            bufferG.fillOval(oldX,oldY,aBall.getSize(),aBall.getSize());
            paint(g);
        }
        
        public void paint(Graphics g) {
            if ( buffer == null ) return;
            g.drawImage(buffer,0,0,null);
            bufferG.setColor(Color.cyan);
            bufferG.fillRect(0,0,getSize().width,getSize().height);
            //bufferG.fillOval(oldX,oldY,aBall.getSize(),aBall.getSize());
            
        }
    } // end Ballcanvas
    
    public TestBallFrame() {
        super("Testing Ball Class");
        setLayout(new FlowLayout());
        addWindowListener(closeIt);
        BallCanvas theBallCanvas = new BallCanvas(500,400);
        add(theBallCanvas);
        aBall = new Ball(theBallCanvas,Color.red,6,30);
        ballThread = new Thread(aBall);
        ballThread.start();
    }
    
    class myWindowAdapter extends WindowAdapter {
        public void windowClosing(WindowEvent e) {
            dispose();
            System.exit(0);
        }
    }
    
    public static void main(String[] args) {
        TestBallFrame theFrame = new TestBallFrame();
        theFrame.setSize(700,700);
        theFrame.setVisible(true);
    }
    
}
