Newsgroup: it.comp.java
Titolo: Problemi con double buffering

Non riesco ad aspettare la fine della creazione dell'immagine.
Ho implementato un sistema a double buffering per la visualizzazione di una
immagine nitida sullo schermo. Ogni volta prendo l'immagine, ridisegno un
rettangolo bianco, disegno con le istruzioni di Graph quello che devo
disegnare e richiamo la paint che incolla sullo schermo del JPannel
l'immagine... ma proprio qui sembra che non vada..
E' come se non ridisegnasse l'immagine prima che sia completa nell'immagine
di buffering o la funzione venga richiamata prima che l'immagine finale sia
realmente incollata.
Ho provato ad utilizzare mediatracker ma serve solo nella fase di
caricamento da file o da internet e sembra non funzionare con le procedure
di graph..
come faccio a fare attendere che il Buffer o lo sfondo siano completati^???
   import javax.swing.*;
   import java.awt.image.*;
   import java.awt.*;
   import java.awt.Color;
   public class VirtualView extends JPanel
   {
      private boolean drawn;
      private MathWorld World;
      private BufferedImage Buffer;
      private Graphics2D Draw;
      public VirtualView (MathWorld World)
      {
         this.World = World;
         drawn = true;
      }
      public void Pointer ()
      {
         int x, y;
         EngineSpaceObject Swap;
         if (Buffer == null)
         {
            Buffer = (BufferedImage)createImage (600,400);
            Draw = (Graphics2D)Buffer.getGraphics ();
         }
         Draw = (Graphics2D)Buffer.getGraphics ();
         MediaTracker tracker=new MediaTracker(this);
         tracker.addImage(Buffer,0);
         Draw.setColor (Color.white);
         Draw.fillRect (1,1,598,398);
         World.getReset();
         Draw.setColor (Color.black);
         while ((Swap = World.getObject ()) != null)
         {
            int NroPoint = Swap.getNroPoints ();
            for (int i = 0; i < NroPoint; i++)
            {
               Draw.drawRect ((int)Swap.getPointpos (i,1) +
(int)Swap.getPivotpos (1),(int)Swap.getPointpos (i,2)  +
(int)Swap.getPivotpos (2),1,1);
            }
         }
         Draw.drawRect (0,0,599,399);
         try
         {
            tracker.waitForAll();
         }
            catch(InterruptedException e)
            {}
         this.repaint ();
      }
      public void paint (Graphics g)
      {
         if (drawn)
         {
            drawn = false;
            Graphics2D g2 = (Graphics2D) g;
            if (Buffer != null)
            {
               int x = (Buffer.getWidth(this));
               int y = (Buffer.getHeight(this));
               g2.drawImage(Buffer,0,0,x,y,null);
            }
            drawn = true;
         }
      }
--
Home page: 
http://www.pasteur.3000.it
Mirror: 
http://www.fortunecity.it/olimpico/pallavolo/6/index.html
Standard mail: 
mac_p...@hotmail.com
Fast mail (for little mail only) : 
bul...@wappi.com
Icq number :: 14165006

Ho implementato un sistema a double buffering per la visualizzazione di una
prova a ridefinire update in questo modo
public void update(Graphics g)
{
	paint(g);
}
repaint invoca update 
il metodo update di default cancella il 
contenuto di un oggetto e poi invoca paint
(questa puo' essere la causa dello sfarfallio)
dai un'occhiata anche al costruttore del JPanel
e' previsto un parametro booleano che indica
se il JPanel deve essere bufferizzato
ciao
http://digilander.iol.it/schiele