Come abbiamo visto, l'applet che disegna quando viene premuto il tasto del mouse ha questa struttura:
import java.awt.*;
public class nomefile extends java.applet.Applet {
public boolean mouseDown(Event e, int x, int y) {
...
}
}
L'applet che fa un disegno all'inizio e poi basta
ha invece una struttura leggermente diversa:
import java.awt.*;
public class nomefile extends java.applet.Applet {
public void paint(Graphics g) {
...
}
}
La differenza sta nel fatto che il primo tipo di
applet contiene un blocco di istruzioni
mouseDown(..) { ... }, mentre il secondo
tipo contiene un blocco paint(..) { ... }.
Come si è già detto, le istruzioni che
si trovano all'interno delle parentesi graffe
di mouseDown(..) { ... } sono quelle che
vengono eseguite quando il pulsante del
mouse viene premuto.Nel caso degli applet che disegnano, il blocco di istruzioni all'interno delle parentesi graffe di paint(..) { ... } vengono invece eseguite comunque all'inizio della esecuzione dell'applet.
È possibile mettere nello stesso applet sia il blocco mouseDown(..) { ... } che quello paint(..) { ... }. In questo modo, possiamo specificare cosa deve succedere sia quando si preme il pulsante del mouse che quando si deve disegnare la finestra. Lo schema generale, a questo punto, risulta il seguente:
import java.awt.*;
public class nomefile extends java.applet.Applet {
public boolean mouseDown(Event e, int x, int y) {
bloccoA
}
public void paint(Graphics g) {
bloccoB
}
}
La sequenza di istruzioni bloccoA viene eseguito
quando si preme il pulsante del mouse, mentre
bloccoB si esegue all'inizio della esecuzione.
Questo è molto interessante, e ci consente di
realizzare un applet in cui possiamo contemporanemente
disegnare qualcosa e rispondere al click.Supponiamo per esempio di voler modificare l'applet CrociCerchi.java che disegna una croce se si fa click in un punto con x<=200 e un cerchio altrimenti. Vogliamo tracciare una linea sul confine fra i punti dove si disegnano le croci e i punti dove si disegnano i cerchi.
La linea che separa le due regioni è una linea verticale in cui x vale 200. Per esempio, si può tracciare con drawLine(200,0,200,500). Dal momento che questa linea va disegnata ogni volta che l'applet parte, la mettiamo all'interno di paint. Il programma complessivo CrociCerchiLinea.java è riportato qui sotto.
/*
Disegna croci e cerchi, piu' la linea
che li separa.
*/
import java.awt.*;
public class CrociCerchiLinea extends java.applet.Applet {
/* risponde al click del mouse */
public boolean mouseDown(Event e, int x, int y) {
Graphics g=getGraphics();
if( x<=200 ) {
g.drawLine(x,y-5,x,y+5);
g.drawLine(x-5,y,x+5,y);
}
else {
g.drawOval(x-5,y-5,10,10);
}
return true;
}
/* disegna la linea di separazione */
public void paint(Graphics g) {
g.drawLine(200,0,200,500);
}
}