/*
  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. 
*/


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 AppletMouse4 extends Applet {

    private RicevitoreMouse ricevitore; 
    private Rectangle quadrato;
    private final static int LATO = 40;  // 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() {
	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
	// installo il ricevitore di eventi:
	addMouseListener(ricevitore);  
	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);
    }

    // classe interna:
    class RicevitoreMouse implements 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.

}

