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