Cerchi in movimento #2

Interattivo!

Il movimento continuo è provocato dal Timer ma con i tasti direzione è possibile far cambiare direzione al cerchio (rendi prima attivo il pannello con il mouse…)
Nella barra di stato è possibile seguire gli eventi della tastiera.

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

public class MuoviCerchioLR extends Applet implements ActionListener, KeyListener
{
  final int xMin=0;
  int       xMax,      // limiti sinistro e destro
            xC,        // coordinate dell'angolo in alto
            yC;        // del cerchio

  int raggio,
  diametro;

  int ms;              // ogni quanti millisecondi si muove
  Timer t;             // per regolare l'animazione
  boolean versoDestra; // da che parte va

  public void init()
  {
     try                { raggio=Integer.parseInt(getParameter("Raggio")); }
     catch(Exception e) { raggio=25;                                       }
     try                { ms=Integer.parseInt(getParameter("Velocita"));   }
     catch(Exception e) { ms=10;                                           }

     diametro=2*raggio;

     Dimension d = getSize();
     xMax=d.width-diametro;
     yC =d.height/2-raggio;
     xC = 0;              // parte da destra
     versoDestra = true;  // verso destra

     t=new Timer(ms, this);
     t.start();

     setBackground(Color.black);
     setForeground(Color.gray);

     addKeyListener(this);
  }

  public void paint(Graphics g)
  {
     g.drawOval(xC, yC, diametro, diametro);
  }

  public void actionPerformed(ActionEvent e)
  {
     if(versoDestra)
     {
        if (xC > xMax)  { versoDestra = false;
                          xC=xMax;
                        }
        else            xC++;
     }
     else
     {
        if (xC <= xMin) { versoDestra = true;
                          xC=xMin;
                        }
        else            xC--;
     }
     repaint();
  }

  public void keyPressed(KeyEvent e)
  {
     int tasto =e.getKeyCode();
     showStatus("Pressed --> "+tasto);

     switch(tasto)
     {
        case KeyEvent.VK_LEFT : versoDestra=false; break;
        case KeyEvent.VK_RIGHT: versoDestra=true ; break;
     }
     repaint();
  }

  public void keyReleased(KeyEvent e)
  {
     int tasto =e.getKeyCode();
     showStatus("Released --> "+tasto);
  }

  public void keyTyped(KeyEvent e)
  {
     int tasto =e.getKeyCode();
     showStatus("Typed --> "+tasto);
  }
}//class