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]);
}
}