/*
  Un applet che disegna un quadrato bianco di lato 30 nel centro dell'
  applet. Quando viene premuto il mouse all'interno del quadrato, esso
  cambia colore. 
  Questo applet e' lo stesso dell'applet denominato: AppletMouse4.java
  ma utilizza una classe interna anonima per gestire gli eventi del 
  mouse. Le differenze con l'applet AppletMouse4.java sono via via 
  evidenziate.
*/


import java.applet.Applet;
import java.awt.Color;
import java.awt.event.MouseListener; 
import java.awt.event.MouseEvent;
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle;

public class AppletMouse4Nuovo extends Applet {

    // Ora non si definisce piu' un oggetto per ricevere gli 
    // eventi:
    ///////    private RicevitoreMouse ricevitore; 
    private Rectangle quadrato;
    private final static int LATO = 30;  // lato del quadrato
    private final static int BIANCO = -1, GIALLO = 1;
    private int colore;
    private int a, b; // coordinate dell'estremo in alto a sin del quadrato

    public void init() {
	// l'oggetto "ricevitore" non e' definito, quindi non puo'
	// essere inizializzato...
	///////ricevitore = new RicevitoreMouse();  
	int larghezza = getWidth();
	int altezza = getHeight();
	a = (larghezza - LATO)/2;
	b = (altezza - LATO)/2;
	// costruisco il quadrato e lo pongo in al centro dell'applet:
	quadrato = new Rectangle(a, b, LATO, LATO);

	colore = BIANCO;  // colore iniziale del quadrato

	// Qui ci sono le principali differenze rispetto alla classe 
	// AppletMouse4.java: 
	// la precedente implementazione prevedeva l'istruzione:
	// addMouseListener(oggetto della classe ricevitore eventi mouse)
	// ora viene usato l'operatore new per costruire un oggetto 
	// per la gestione degli eventi: new MouseListener() {...}
	// dove ... indica l'implementazione della classe.
	// installo il ricevitore di eventi:
	addMouseListener(
			 new MouseListener() {
			     public void mousePressed(MouseEvent evt) {
				 // catturo le coordinate del punto in cui e' stato 
				 // premuto il mouse:
				 int xCoord = evt.getX();
				 int yCoord = evt.getY();
				 if (xCoord > a && xCoord <= a + LATO && 
				     yCoord > b && yCoord <= b + LATO) 
				     colore = -colore;
				 repaint();
			     }
			     // i seguenti metodi non fanno nulla, ma devono essere inseriti,
			     // poiche' la classe implementa l'interfaccia MouseListener:
			     
			     public void mouseReleased(MouseEvent evt) {}
			     
			     public void mouseEntered(MouseEvent evt) {}
			     
			     public void mouseExited(MouseEvent evt) {}
			     
			     public void mouseClicked(MouseEvent evt) {}
			     
			 } // fine classe interna anonima.

                         ); // chiude la parentesi di "addMouseListener(" 
	setBackground(Color.red);
    }

    public void paint(Graphics g) {
	Graphics2D g2 = (Graphics2D)g;
	if (colore == BIANCO)
	    g2.setColor(Color.white);
	else
	    g2.setColor(Color.yellow);
	g2.fill(quadrato);
    }
}

