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 Codice Html
<APPLET CODE="MuoviCerchioLR.class" WIDTH="300" HEIGHT="100">
<PARAM name=Raggio value="30">
<PARAM name=Velocita value="10">
</APPLET>
Codice Java
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 |