/* 
   Un applet che disegna un quadrato rosso che si sposta sullo schermo.
   L'applet esegue un'animazione e si differisce pochissimo dall'applet
   Movimento1.java. I commenti "////////" indicano le parti tolte dal
   precedente applet.
*/

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

public class Movimento2 extends JApplet {

    ///////// private JButton sposta;
    private Rectangle rettangolo;
    private PannelloDisegno disegno;
    public int a, b; 

    public void init() {
	rettangolo = new Rectangle(0, 80, 40, 30);

	// decido di quanto traslare il rettangolo:
	a = 5; 
	b = 0;

	////////// sposta = new JButton("sposta");

	// in questo caso il ricevitore di eventi e' lo stesso
	// del ricevitore usato nell'applet Movimento1.java, salvo 
	// che e' utilizzato da un temporizzatore, anzicche' da 
	// un bottone:
	Ricevitore1 ricevitore1 = new Ricevitore1();
	///////// sposta.addActionListener(ricevitore1);
	Timer t = new Timer(70, ricevitore1);

	//costruisco un oggetto della classe interna Pannello
	// disegno che contiene il disegno del rettangolo rosso:
	disegno = new PannelloDisegno();

	// imposto il layout:
	Container pannelloApplet = getContentPane();
	pannelloApplet.setLayout(new BorderLayout());
	///////// pannelloApplet.add(sposta, BorderLayout.SOUTH);
	pannelloApplet.add(disegno, BorderLayout.CENTER);

	// faccio partire l'animazione:
	t.start();

    }

    // classe interna che permette di definire il pannello 
    // con il disegno del rettangolo:
    class PannelloDisegno extends JPanel {
	public void paintComponent(Graphics g) {
	    super.paintComponent(g);
	    Graphics2D g2 = (Graphics2D)g;
	    rettangolo.translate(a, b);
	    g2.setColor(Color.red);
	    g2.fill(rettangolo);
	}

    }  // fine classe interna PannelloDisegno

    // classe interna che devinisce i ricevitori di eventi
    // da passare al temporizzatore:
    class Ricevitore1 implements ActionListener {
	public void actionPerformed(ActionEvent e) {
	    int x = (int)rettangolo.getX();
	    // se il rettangolo e' scappato troppo a destra, 
	    // lo riporto alla posizione iniziale:
	    if (x > 200) 
		rettangolo.translate(-x, 0);
	    disegno.repaint();
	}
    } // fine classe interna Ricevitore1
}
