Esercizio 5 bis.


Java Sun

Earthweb
(ex Gamelan)

Jars

Java Boutique

JavaWorld

PIP






  Es.5bis

   In Java lo spessore del tratto di disegno è univocamente determinato (è quello della matita), per avere un tratto più spesso (penna) ci vuole un piccolo accorgimento che assomiglia a quello che abbiamo già usato per scrivere in rilievo: per fare una linea più spessa del solito basta disegnare più linee "intorno" a quella iniziale. Il codice che realizza questo è:

	g.drawLine(initX, initY, e.getX(), e.getY());
	g.drawLine(initX, initY-1,e.getX(),e.getY()-1);
	g.drawLine(initX-1,initY,e.getX()-1,e.getY());
	g.drawLine(initX-1,initY-1,e.getX()-1,e.getY()-1);

   Invece per fare l'aerografo, si disegnerà un cerchio nella posizione del mouse:g.fillOval(initX, initY,10,10);. Si osserverà che se si muove velocemente il mouse, il tratteggio dell'aerografo non è continuo, contrariamente a quelli della matita e della penna. Questo proviene dal fatto che con l'istruzione g.drawLine(initX, initY, e.getX(), e.getY()); (completata dopo da initX = e.getX(); ecc...) si segue perfettamente i movimenti del mouse; invece nel tracciare il cerchio abbiamo solo il punto di "partenza".

   Detto questo, abbiamo tutto il necessario per definire il nostro strumento di disegno. Facciamo quindi una classe Pencil sul modello di MouseMotionEs.java. Il costruttore comprenderà un colore e un intero come parametri. Il colore sarà quello con cui si disegna, l'intero sarà lo stile (0 = la matita, 1 = la penna, 2 = aerografo). Oltre ai metodi dell'interfaccia MouseMotionListener, la classe avrà i metodi CambiaColor, getPenStyle, setPenStyle.
Codice completo della classe Pencil.

   Per quanto riguarda la tela, facciamo una classe Can_Disegno che estende la classe Canvas. Il costruttore ha tre parametri: un colore e due interi. Gli interi (w,h) sono le dimensioni, il colore serve nel metodo paint. Nell'applet Disegno, la tela è costruita impostando il parametro colore sul colore di sfondo. Un esercizio interessante consiste nell'impostare come colore dello sfondo della tela un colore diverso dallo sfondo dell'applet e aggiungere un comando (menù) per la scelta dello sfondo della tela (provateci!).
La tela deve fare solo una cosa: cancellare tutto; questo viene fatto nel metodo paint con fillRect(0,0,w,h);; il metodo Canc() non è altro che repaint().
Codice completo della classe Can_Disegno

   Rimane da mettere tutto insieme, questo viene fatto nella classe Disegno. Il layout è un BorderLayout di cui vengono utilizzati solo i campi "North", "South" e "Center". Ogni volta, i vari pulsanti di comando sono prima messi in un pannello (il cui layout è un GridLayout) e dopo il pannello viene inserito in "North" (risp. "South"); questo inscatolamento offre maggiore controllo. Osservare il costruttore GridLayout(r,c,v,h); dove r,c sono le righe e le colonne e dove v, h misurano lo spazio verticale e orizzontale tra due componenti (cf doc).
Codice completo della classe Disegno




 next		content		previous