//******************************************************************** // Rebound.java Author: Lewis and Loftus // // Esempio d'animazione e uso della classe Timer. //******************************************************************** import java.applet.Applet; import java.awt.*; import java.awt.event.*; import javax.swing.Timer; public class Rebound extends Applet { private final int APPLET_WIDTH = 200; private final int APPLET_HEIGHT = 100; private final int IMAGE_SIZE = 35; private final int DELAY = 20; private Timer timer; private Image image; private int x, y, moveX, moveY; //----------------------------------------------------------------- // Inizializza l'applet e il timer per l'animazione. //----------------------------------------------------------------- public void init() { addMouseListener (new ReboundMouseListener()); timer = new Timer (DELAY, new ReboundActionListener()); timer.start(); x = 0; y = 40; moveX = moveY = 3; image = getImage (getCodeBase(), "happyFace.gif"); setBackground (Color.black); setSize (APPLET_WIDTH, APPLET_HEIGHT); } //----------------------------------------------------------------- // Disegna l'immagine nella posizione corrente. //----------------------------------------------------------------- public void paint (Graphics page) { page.drawImage (image, x, y, this); } //***************************************************************** // Rappresenta l'ascoltatore del mouse per l'applet. //***************************************************************** private class ReboundMouseListener implements MouseListener { //-------------------------------------------------------------- // Ferma e avvia il timer (e quindi l'animazione) // quando il bottone del mouse viene azionato. //-------------------------------------------------------------- public void mouseClicked (MouseEvent event) { if (timer.isRunning()) timer.stop(); else timer.start(); } //-------------------------------------------------------------- // Fornisce definizioni vuote per gli i metodi evento non usati. //-------------------------------------------------------------- public void mouseEntered (MouseEvent event) {} public void mouseExited (MouseEvent event) {} public void mousePressed (MouseEvent event) {} public void mouseReleased (MouseEvent event) {} } //***************************************************************** // Rappresenta il listener per il timer. //***************************************************************** private class ReboundActionListener implements ActionListener { //-------------------------------------------------------------- // Aggiorna la posizione dell'immagine ed eventualmente la // direzione del movimento quando il timer genera un evento azione. //-------------------------------------------------------------- public void actionPerformed (ActionEvent event) { x += moveX; y += moveY; if (x <= 0 || x >= APPLET_WIDTH-IMAGE_SIZE) moveX = moveX * -1; if (y <= 0 || y >= APPLET_HEIGHT-IMAGE_SIZE) moveY = moveY * -1; repaint(); } } }