PDA

View Full Version : [JAVA] disegnare smile help


IspiCiosa
28-03-2008, 15:27
ragazzo ho scritto questa classe...



package javaapplication6;


import java.awt.*;


// disegna uno smile

public class Smile {

//caratteristiche dell'oggetto

double xs, ys;
double dims;



// pone lo smile nella posizione 0, 0

public Smile ()
{
xs=0;
ys=0;
dims=1;

}

/** Costruttore , costruisce lo smile

* @param x coordinata x del punto in alto a sinistra
* @param y coordinata y del punto in alto a sinistra
* @param dimensione dimensione del quadrato contente lo smile
*/
public Smile (double xp, double yp, double dimensione) {
xs=xp;
ys=yp;
dims=dimensione;

}


/** rendering della faccina
* Per ottenere il rendering devo
* passare la ampiezza e la altezza massima
* della finestra dove disegnare
*
*
*/
public void draw (int xa, int ya, Graphics g, String ciao) {

int x=(int) (xs * xa);
int y=(int) (ys * ya);
// per mantenere la faccina quadrata e magari dentro lo schermo
// prendo la dimensione minima

int dim= (int)(xa>ya?ya:xa);

g.drawOval( x, y, dim, dim ); //faccia
g.drawOval( x+dim/4, y+dim/4, dim/6, dim/4 ); //occhio sinistro
g.drawOval( x+5*dim/8, y+dim/4, dim/6, dim/4 ); //occhio destro
g.drawArc ( x+dim/4, y+dim/2, dim/2, dim/3, 0, -185); //bocca

g.setColor(Color.BLUE);
//rettangolo
g.drawRect(300, 40, 160, 90);


g.drawString( "Hello "+ciao, 350, 85);

//triangolo
int [] z={300,350,390};
int [] c={170,130,130};
int punti=3;

g.drawPolygon(z,c,punti);

}

}


come faccio se voglio che a seconda dell contenuto della variabile ciao
lo smiley viene stampato traslato verso destra???

andbin
28-03-2008, 15:43
come faccio se voglio che a seconda dell contenuto della variabile ciao
lo smiley viene stampato traslato verso destra???Se vuoi sapere la dimensione in pixel di una stringa disegnata sul Graphics, prendi il FontMetrics dal Graphics e usa i metodi stringWidth() ecc....

IspiCiosa
28-03-2008, 18:12
credo che tu non abbia capito...

vorrei fare una cosa del tipo se su variabile ciao il contenuto è dario allora stampa lo smile al centro se il contenuto è carlo stampa lo smile a sinistra se davide lo stampa a destra....

come si fa??:mc:

IspiCiosa
28-03-2008, 19:00
up

wingman87
28-03-2008, 19:09
Se disegni sempre sullo stesso oggetto Graphics allora devi passare al metodo draw un parametro in più che indichi l'offset orizzontale da cui iniziare a disegnare.

vincenzo83
28-03-2008, 19:09
Non ti sarò di grande aiuto, però....

if(ciao.equals("Dario")
...imposta le coordinate al centro
if(ciao.equals("Carlo")
...imposta le coordinate a destra

IspiCiosa
28-03-2008, 19:31
Se disegni sempre sullo stesso oggetto Graphics allora devi passare al metodo draw un parametro in più che indichi l'offset orizzontale da cui iniziare a disegnare.

e come faccio a fare l'offset dello smile??

wingman87
29-03-2008, 01:28
Guarda, riguardando bene il codice rimangio quello che ho detto ma non mi è chiara una cosa, perché nel metodo draw fai:

int x=(int) (xs * xa);
int y=(int) (ys * ya);

x e y dovrebbero essere il top e il left dell'intero smile se non erro. Non potevi solo usare xs e ys che hai inizializzato nel costruttore? xa e ya cosa sono? E anche dim, non dovrebbe essere dims (l'altra variabile che hai inizializzato nel costruttore)?
Detto questo, se la posizione e la dimensione dello smile la definisci nel costruttore e poi il draw rispetta questi parametri non serve alcun offset, semplicemente nel main o dove crei gli smile li creerai tutti passando ai costruttori delle posizioni (x) differenti.