Newsgroup: it.comp.java
Titolo: ancora problemi con il paint :(

Uff....sto cavolo di metodo paint mi sta iniziando ad urtare i nervi!
In pratica cosa succede...ho creato un canvas, nella costruzione gli faccio
disegnare una griglia, gli ho applicato un mouse listener e a seconda del
punto in cui clicko faccio disegnare un fillOval...perfetto...funziona
egregiamente i cerchi disegnati restano visibili e posso continuare a
clickare e far apparire i relativi cerchi!
A questo punto devo far alternare le cose...un cerchio lo disegno io e uno
lo disegna il pc!
Perfetto...e quě iniziano i problemi...e non capisco che cavolo abbia che
non vada...in pratica quando č il turno del pc rimuovo il mouselistener dal
canvas (in modo che l'utente non possa interagire con il programma mentre
lavora il pc e quindi falsi i risultati) e poi prendo le stesse righe che
uso nel mouse listener ovvero:
  Graphics g = schemaGioco.getGraphics();
  g.setColor(colorTurn);
  g.fillOval(125, 125, 80, 80);
e poi il programma termina (e non vi sono validate o repaint..), ma in
realtŕ fa il solito scherzo...disegna il cerchio e poi fa un repaint e
quindi me lo ricancella :o :'(
Ora essendo le stesse righe del mouse listener....perchč in un caso mi tiene
il cerchio e nell'altro me lo manda a putt....?!? se alla fine del turno del
pc, riattivo il mouselistener e quindi dopo aver disegnato con il mouse
ripasso il turno al pc, lui questa volta disegna il tutto regolarmente e me
lo lascia visibile? :o
Ma č possibile che mi devo picchiare in questo modo con il paint e
similari!?
thx
byez
B@STI

   g.fillOval(125, 125, 80, 80);
il problema non credo sia nel codice che usi per disegnare
piuttosto nel modo in cui organizzi le operazioni di disegno
devi crearti un'immagine offscreen e disegnarci dentro a questa e chiamare
repaint
public void update(Graphics g)
{
    paint(g);
}
public void paint(Graphics g)
{
   g.drawImage(offscreenimage,0,0,this);
}
il mouselistener non č necessario rimuoverlo e aggiungerlo tutte le volte
puoi anche usare un flag per indicare se accettare o no le azioni
dell'utente
ciao)o
Andrea
http://jame.sf.net

 
http://jame.sf.net
grazie
byez
B@STI

 nn capisco cosa intendi...
andavo di fretta... purtroppo anche adesso vado di fretta perchè ho sonno
1) creati un'immagine offscreen con il metodo Component.createImage(int,int)
Image offscreen = createImage(w,h);
2) implementa i metodi update e paint
public void update(Graphics g)
{
    paint(g);
}
public void paint(Graphics g)
{
   g.drawImage(offscreen,0,0,this);
}
3) disegna i cerchi nell'immagine esattamente come se
stessi disegnando nel canvas e invoca il metodo repaint
Graphics offscreengfx = offscreen.getGraphics();
...
offscreengfx.fillOval(125, 125, 80, 80);
...
repaint();
Andrea.ciao()
http://jame.sf.net

Ok capito...però non capisco perchè con il canvas non va? Il principio non è
identico?
La cosa che mi resta strana è che nel listener la cosa funziona e non ci
sono repaint....mentre nell'altro metodo il tutto fa come gli
pare....capisci dove resto perplesso :P
many thx
byez
B@STI

 pare....capisci dove resto perplesso :P
il fatto è che ci sono eventi asincroni con il tuo codice che possono
intervenire
quando meno te lo aspetti, per questo non dovresti mai disegnare in un
componente
invocando Component.getGraphics()
penso sia questo il tuo problema, altrimenti posta tutto il codice
incriminato e rivediamolo
ciao)o
Andrea
http://jame.sf.net

> penso sia questo il tuo problema
infatti č quello...la generazione del canvas e la prima mossa del pc si
sovrappongo al tal punto da far disegnare prima il cerchio della mossa che
non il disegnamento del canvas!
Infatti se faccio generare il canvas...temporeggio con altre
operazioni...poi la prima mossa del pc resta perfettamente visualizzata!
Mille graize per la pazienza!
byez
B@STI