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