Un cerchio oppure un quadrato

Realizzare un applet che disegna un cerchio. In un angolo, vanno disegnati due rettangoli. Premendo il mouse nel rettangolo in alto il cerchio deve diventare un quadrato, mentre premendo dentro il rettangolo in basso deve tornare a essere un quadrato.

In pratica, il problema si risolve cosí: quando si preme il pulsante, si va a controllare se la posizione è all'interno di uno dei due rettangoli. Se lo è, si cancella la figura disegnata in precedenza e si disegna quella nuova.

Per rendere il disegno permanente, occorre che la procedura paint sappia se la figura corrente è un quadrato oppure un cerchio. Dal momento che la figura viene cambiata da mouseDown, serve una variabile globale. Usiamo quindi una variabile globale intera cerchio. Vogliamo che questa variabile valga 1 se la figura corrente è un cerchio, 0 se è un rettangolo. La variabile deve inizialmente valere 1 (si comincia con il cerchio) e poi deve venire cambiata quando si preme il pulsante in uno dei rettangoli. La procedura paint può usare il valore di questa variabile per capire se deve disegnare un quadrato oppure un cerchio.

Serve solo una ultima precisazione prima di mostrare il codice: in Java, l'unica istruzione per cancellare è la clearRect. Non esiste una istruzione clearOval. Per cancellare il rettangolo usiamo la clearRect, e questo è abbastanza chiaro. Per cancellare il cerchio non possiamo usare clearOval, dal momento che non esiste. Usiamo ancora la clearRect, cancellando una zona rettangolare che contiene il cerchio.

Il programma finale CerchioQuadrato.java è qui sotto:

/*
  Disegna un cerchio oppure un quadrato.
*/

import java.awt.*;

public class CerchioQuadrato extends java.applet.Applet {
  int cerchio=1;

  public boolean mouseDown(Event e, int x, int y) {
    Graphics g=getGraphics();
    
    if( (x>=10) && (x<=70) && (y>=10) && (y<=30) ) {
      g.clearRect(100,100,200,200);

      g.drawRect(150,150,100,100);

      cerchio=0;
    }

    if( (x>=10) && (x<=70) && (y>=50) && (y<=70) ) {
      g.clearRect(100,100,200,200);

      g.drawOval(150,150,100,100);

      cerchio=1;
    }

    return true;
  }

  public void paint(Graphics g) {
    g.drawRect(10,10,60,20);
    g.drawString("quadrato",15,25);

    g.drawRect(10,50,60,20);
    g.drawString("cerchio",15,65);

    if( cerchio==1 ) {
      g.drawOval(150,150,100,100);
    }
    else {
      g.drawRect(150,150,100,100);
    }
  }
}