Tambem há um outro jeito de parar o efeito.
Use o método update() em vez do repaint().
Assim:
 
public void repaint(Graphics g) {
    update(g);
}
 
//Aqui você coloca todas as funções gráficas que você precisa
public void update(Graphics g) {
    ...
}
 
Se vc usa esse método, em vez de a imagem piscar,
ela funciona como se fosse um double buffering
mas checa apenas as diferenças entre cada uma das imagens.
 
Falou.
-----Original Message-----
From: Dorival (WM) [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, November 27, 2001 12:20 PM
To: [EMAIL PROTECTED]
Subject: Re: [java-list] Não consigo parar o efeito piscante (Double_Buffer ing)

Meu amigo teve um problema igualzinho ao seu, ele resolveu isto após dias de pesquisa, conversa com ele que ele chegou a fundo neste problema e resolveu.
 
 
 
----- Original Message -----
Sent: Monday, November 26, 2001 3:47 PM
Subject: Re: [java-list] Não consigo parar o efeito piscante (Double_Buffer ing)

At 14:56 26/11/01 -0200, you wrote:
Pessoal:
 
Sou leigo em Java e estou precisando implementar uma pequena animação de texto sobrepondo uma figura JPG sem aquele horrivel efeito piscante.
Eu tentei criar o velho esquema de double_buffering, mas mesmo assim continua piscando, não consigo entender.
Toda vez que é chamado o método repaint a imagem do fundo entra lentamente (é um JPG de 640x480) no meu micro (Celeron 450).
O que eu estou fazendo de errado ?
Agradeço a atenção de todos.
Fábio.
 
Método Paint
 
    public void paint(Graphics g) {
        if(privez==1) // Na primeira vez eu crio o contexto gráfico
        {
           privez=0;
           // Cria buffer
           buffer = createImage(640, 480);
           // obtem e prepara contexto grafico associado
           gContexto = buffer.getGraphics();
           gContexto.setColor(Color.black);
           gContexto.fillRect(0, 0, 640, 480);
           gContexto.drawImage(logo,0,0,this); // Jpg 640x480
        }

 
        gContexto.setColor(Color.black);
        gContexto.fillRect(0, 0, 640, 480);
        gContexto.drawImage(logo,0,0,this);
        String frase="";
        frase=instru.substring(pos,pos+60);
        gContexto.setFont(new Font("Serif",Font.BOLD,40));
        gContexto.setColor(Color.blue);
        gContexto.drawString(frase,10,440);
        g.drawImage(buffer, getInsets().left, getInsets().top, this);
         try { // Espero meio segundo
              Thread.sleep(500);
         } catch (InterruptedException e) {
              e.printStackTrace();
         }
         pos=pos+1; // Troco a substring dando a impressao
         // de um texto que rola...
         if(pos>fim-61)
         {
              pos=1;
          }
              repaint();
          }
    }
 


vc nao deve fazer essa chamada do repaint() dentro do paint... alem disso, a chamada repaint() (pelo menos comigo) causa esse flickering mesmo... crie um thread para a animação e faca desse jeito:

Metodo Paint:

    public void paint(Graphics g) {
        if(privez==1) // Na primeira vez eu crio o contexto gráfico
        {
           privez=0;
           // Cria buffer
           buffer = createImage(640, 480);
           // obtem e prepara contexto grafico associado
           gContexto = buffer.getGraphics();
           gContexto.setColor(Color.black);
           gContexto.fillRect(0, 0, 640, 480);
           gContexto.drawImage(logo,0,0,this); // Jpg 640x480
        }

 
        gContexto.setColor(Color.black);
        gContexto.fillRect(0, 0, 640, 480);
        gContexto.drawImage(logo,0,0,this);
        String frase="";
        frase=instru.substring(pos,pos+60);
        gContexto.setFont(new Font("Serif",Font.BOLD,40));
        gContexto.setColor(Color.blue);
        gContexto.drawString(frase,10,440);
        g.drawImage(buffer, getInsets().left, getInsets().top, this);
         try { // Espero meio segundo
              Thread.sleep(500);
         } catch (InterruptedException e) {
              e.printStackTrace();
         }
   } // fim do paint()


* Crie esta classe dentro de sua classe

private class updateThread extends Thread {
  public void run(){
      pos=pos+1; // Troco a substring dando a impressao
       // de um texto que rola...
        if(pos>fim-61)
        {            
            pos=1;
         }
             update(); // chamar repaint() causa flickering
              this.sleep(100);
          }
   } // faltam os try_catch, mas... dah pra imaginar como fica :)





Com isso, axo q resolve ":)

[]'s
-------------------------------------------------
----------- Herval Freire de A. Júnior ----------
----------- mailto:[EMAIL PROTECTED] ------------
--------- http://www.herval.hpg.com.br ----------
----------------- UIN: 2067270 ------------------
-------------------------------------------------
--[The adepts are everywhere... awake! v0.666a]--
-------------------------------------------------

http://member.isavvix.com/herval/vote.jsp?enquete=1003

Responder a