Esercizio 5.


Java Sun

Earthweb
(ex Gamelan)

Jars

Java Boutique

Java World

PIP






  Es.5

   (Gestione degli eventi) Fare l'applet Disegno qui sotto.



Questo esercizio che consiste nel fare un programma di disegno elementare, richiede un minimo di articolazione, perciò prima di partire in quarta a battere del codice, analizziamo un pò la situazione. Possiamo distinguere tre oggetti: lo strumento di disegno, la tela sulla quale si disegna, l'interfaccia utente contenente la tela e i pulsanti. Ovviamente la classe dell'applet sarà quella dell'interfaccia utente. Possiamo fare una classe per lo strumento di disegno e ne faremo una anche per la tela, per definire il metodo "cancella".
Riassumendo: 1) l'interfaccia utente (l'applet) avrà i pulsanti di sopra e di sotto, in mezzo la tela di disegno, questo per il layout; inoltre l'applet dovrà gestire gli eventi dei pulsanti. Questi eventi saranno di tre tipi:
  • con un pulsante di sotto, si chiama un metodo CambiaColore dello strumento di disegno affinchè questi disegni con il colore scelto.
  • con un pulsante "matita", "penna", "aerografo", si chiama un metodo setPenStyle dello strumento di disegno affinchè questi disegni nel modo voluto.
  • finalmente con il pulsante "cancella" si chiama un metodo della tela affinchè questa cancelli tutto.


  • E la gomma? basterà dire allo strumento di disegno di scegliere uno stile e il colore dello sfondo; se si vuole fare delle cancellature di fino (risp. di grosso), lo stile sarà quello della matita (risp. aerografo); abbiamo scelto la via di mezzo (penna).
    Questo implica che dopo avere usato la gomma, per potere tornare a disegnare bisognerà scegliere un colore ("visibile")

    Iniziamo dal più difficile: lo strumento di disegno. L'idea è di usare un MouseMotionListener, un pò come si era fatto in MouseMotionEs.java; invece di fare disegnare le coordinate del mouse, facciamo disegnare una retta dal punto iniziale al punto in cui si trova il mouse e questo, lo facciamo nel metodo mouseDragged:

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


    Questo ci farà disegnare con un tratto fine, da matita (l'unico modo in cui Java è in grado di disegnare se non si usa Java2D).
    Nel metodo mouseMoved aggiorneremo le coordinate:

    initX = e.getX();
    initY = e.getY();


    Forse come primo passo non è male cercare di fare un'applet che fa funzionare questo primo primitivo programma di disegno:

    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class ProvaPencil extends Applet 
    implements MouseMotionListener{
    
    
    int initX,initY;
    int x,y; //per il mouse
    Color bgcol = new Color(238,238,238);
    
    public void init(){
    	setBackground(bgcol);
    	addMouseMotionListener(this);
    }
    
    
    public void mouseMoved(MouseEvent e){
    	initX = e.getX();
    	initY = e.getY();
    	}
    
    
    public void mouseDragged(MouseEvent e){
    	x= e.getX();
    	y = e.getY();
    	Graphics g = getGraphics();//recupero di un 
    //contesto grafico dell'applet
    	g.setColor(Color.blue);
    	g.drawLine(initX, initY,x,y);
    	initX = x;
    	initY = y;
    }
    public void update(Graphics g){//per evitare che update
    //che è comunque chiamata da paint, cancelli lo sfondo
    	paint(g);
    	 }
    }

    Provate adesso a fare disegnare questo strumento di disegno in vari modi (penna, aerografo) e provate a definire la tela come estensione della classe Canvas (vedere la doc).

    continua...

    Una soluzione sarà messa in rete prossimamente.

    Per scaricare l'applet Disegno (file .zip)



     next		content		previous