Il metodo da usare è molto semplice: ci servono quattro vettori per rappresentare i dati di ciascuno dei rettangoli disegnati (per ogni rettangolo ci servono le coordinate del punto in alto a sinistra, la larghezza e l'altezza). Questi dati sono modificati dalle funzioni mouseDown e mouseDrag, e sono poi usati da paint per disegnare effettivamente i rettangoli. Quindi, questi vettori devono essere variabili globali. Un'altra variabile globale che ci serve è quella che contiene il numero di rettangoli che sono stati disegnati fino ad ora. Il programma inizia quindi cosí:
import java.awt.*; public class RettangoliMouse extends java.applet.Applet { int xvett[] = new int[100]; int yvett[] = new int[100]; int wvett[] = new int[100]; int hvett[] = new int[100]; int nrettangoli=0;La funzione mouseDown viene chiamata ogni volta che il pulsante viene premuto. A questo deve corrispondere la definizione del punto in alto a sinistra di un nuovo rettangolo. Quindi, la funzione mouseDown contiene le due istruzioni:
public boolean mouseDown(Event e, int x, int y) { xvett[nrettangoli]=x; yvett[nrettangoli]=y; return true; }La funzione mouseUp viene chiamata quando il pulsante viene rilasciato. Quindi, questa funzione deve definire la largezza e l'altezza del rettangolo. Inoltre, dato che il rettangolo è terminato, deve incrementare di uno il valore della variabile che conta il numero di rettangoli. A questo punto, si può disegnare di nuovo tutta la figura.
public boolean mouseUp(Event e, int x, int y) { wvett[nrettangoli]=x-xvett[nrettangoli]; hvett[nrettangoli]=y-yvett[nrettangoli]; nrettangoli=nrettangoli+1; repaint(); return true; }Il programma RettangoliMouse.java effettua anche il tracciamento dei rettangoli durante il disegno.
/* Disegna dei rettangoli con il trascinamento del mouse. */ import java.awt.*; public class RettangoliMouse extends java.applet.Applet { int xprec=0, yprec=0; int xvett[] = new int[100]; int yvett[] = new int[100]; int wvett[] = new int[100]; int hvett[] = new int[100]; int nrettangoli=0; public boolean mouseDown(Event e, int x, int y) { xvett[nrettangoli]=x; yvett[nrettangoli]=y; xprec=0; yprec=0; return true; } public boolean mouseUp(Event e, int x, int y) { wvett[nrettangoli]=x-xvett[nrettangoli]; hvett[nrettangoli]=y-yvett[nrettangoli]; nrettangoli=nrettangoli+1; repaint(); return true; } public boolean mouseDrag(Event e, int x, int y) { Graphics g=getGraphics(); g.setColor(getBackground()); g.drawRect(xvett[nrettangoli],yvett[nrettangoli], xprec-xvett[nrettangoli],yprec-yvett[nrettangoli]); g.setColor(Color.black); g.drawRect(xvett[nrettangoli],yvett[nrettangoli], x-xvett[nrettangoli],y-yvett[nrettangoli]); xprec=x; yprec=y; return true; } public void paint(Graphics g) { int i; for(i=0; i<=nrettangoli-1; i++) g.drawRect(xvett[i],yvett[i],wvett[i],hvett[i]); } }