import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.Timer;
import javax.swing.JPanel;

public class DotPanel extends JPanel implements KeyListener
{
    private Dot theDot;
    private int dx;
    private int dy;

    public DotPanel()
    {
        dx = 0;
        dy = 0;

        theDot = new Dot(100, 100);

        setBackground(Color.white);

        setFocusable(true);

        addKeyListener(this);

          ActionListener taskPerformer = new ActionListener()
          {
                  public void actionPerformed(ActionEvent evt)
                  {
                      repaint();
                  }
              };
          new Timer(10, taskPerformer).start();
        }

    // The following methods are required to implement a KeyListener
    public void keyPressed(KeyEvent evt)
    {
        int code = evt.getKeyCode();

        if (code == KeyEvent.VK_UP)
        {
            dy--;
        }
        else if (code == KeyEvent.VK_DOWN)
        {
            dy++;
        }
        else if (code == KeyEvent.VK_RIGHT)
        {
            dx++;
        }
        else if (code == KeyEvent.VK_LEFT)
        {
            dx--;
        }
    }

    public void keyReleased(KeyEvent evt)
    {   /* No action */     }

    public void keyTyped(KeyEvent evt)
    {    /* No action */        }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        if ( (theDot.getCenter().x + theDot.getRadius()) > this.getSize().getWidth() ||
            (theDot.getCenter().x - theDot.getRadius()) < 0 )
        {
            dx = -dx;
        }

        if ( (theDot.getCenter().y + theDot.getRadius()) > this.getSize().getHeight() ||
            (theDot.getCenter().y - theDot.getRadius()) < 0 )
        {
            dy = -dy;
        }

        theDot.move(dx, dy);

        g.setColor(Color.green);

        theDot.paint(g);
    }
}
