|
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 è:
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. 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!). 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). |
next content previous