Newsgroup: it.comp.java
Titolo: Riuscite a risolvere questo piccolo problema di repaint?

Sto facendo un gioco in java e mi sono trovata di fronte ad un problema
con il repaint..per non "distruggervi" con codice lunghissimo ho
riassunto il problema nella classe Prova scritta a seguire:
import java.awt.*;
import javax.swing.*;
import java.applet.*;
import java.awt.event.*;
/**
 * Classe Prova - descrivi qui la classe
 *
 * @author (il tuo nome)
 * @version (un numero di versione)
 */
public class Prova extends JApplet
{
   //Scorrere del tempo
   static final int DELAY_TIME = 1000;
   private Timer time;
   private int timeGame;
    /**
    * Richiamato dal browser o dall'appletviewer per informare il
JApplet che
    * è stato caricato nel sistema. E' sempre richiamato prima che il
metodo
    * start sia richiamato per la prima volta.
    */
   public void init()
   {
      // questo è un trucco per aggirare un conflitto di sicurezza con
i browser
      // attuali, compresi Netscape e Internet Explorer, i quali non
consentono
      // l'accesso alla coda di eventi di sistema di AWT tentato dai
JApplet.
      JRootPane rootPane = this.getRootPane();
      rootPane.putClientProperty("defeatSystemEventQueueCheck",
Boolean.TRUE);
      // aggiungi tutte le inizializzazioni necessarie al JApplet
      timeGame = 30;
      time = new Timer(DELAY_TIME, new ReboundActionListener());
      time.start();
   }
   /**
    * Richiamato dal browser o dall'appletviewer per informare il
JApplet che
    * dovrebbe essere avviata l'esecuzione. E' richiamato dopo il
metodo init
    * e ogni volta che il JApplet è caricato in una pagina Web.
    */
   public void start()
   {
      // aggiungi il codice necessario all'avvio
      // ogni volta che è caricata una pagina web
   }
   /**
    * Richiamato dal browser o dall'appletviewer per informare il
JApplet che
    * dovrebbe fermare la sua esecuzione. E' richiamato quando la
pagina Web
    * che contiene questo JApplet è stata sostituita da un'altra
pagina, e anche
    * subito prima che il JApplet sia distrutto.
    */
   public void stop()
   {
      // aggiungi il codice da eseguire quando la pagina è
      // sostituita da un'altra pagina o prima che il JApplet sia
distrutto
   }
   /**
    * metodo paint dell'applet.
    *
    * @param  g   l'oggetto Graphics per questo applet
    */
   public void paint(Graphics g)
   {
      g.drawString("TIME: " +timeGame,20,20);
   }
   /**
    * Richiamato dal browser o dall'appletviewer per informare il
JApplet che
    * deve rilasciare qualsiasi risorsa è stata allocata prima di
essere
    * distrutto. Prima del metodo destroy è sempre richiamato il
metodo stop.
    */
   public void destroy()
   {
      // aggiungi il codice che dev'essere eseguito subito
      // prima della distruzione del JApplet.
   }
   /**
    * Restituisce informazioni riguardo l'applet.
    * Un applet dovrebbe ridefinire questo metodo in modo da restituire
una String
    * contenente informazioni sull'autore, la versione, il copyright
del JApplet.
    *
    * @return String con informazioni su questo JApplet
    */
   public String getAppletInfo()
   {
      // aggiungi le principali informazioni riguardo l'applet.
      return "Titolo:   \nAutore:   \nUna breve descrizione
dell'applet. ";
   }
   /**
    * Restituisce informazioni sui parametri del JApplet.
    * Restituisce informazioni circa i parametri che sono accettati dal
JApplet.
    * Un applet dovrebbe ridefinire questo metodo per restituire un
array
    * di String che descrivono i parametri.
    * Ciascun elemento dell'array dovrebbe consistere in tre String
contenenti il nome,
    * il tipo ed una descrizione.
    *
    * @return String[] con informazioni sui parametri di questo JApplet
    */
   public String[][] getParameterInfo()
   {
      // fornisce informazioni sui parametri dell'applet
      String paramInfo[][] = {
             {"firstParameter",  "1-10",  "descrizione del primo
parametro"},
             {"status", "boolean", "descrizione del secondo
parametro"},
             {"images",   "url",  "descrizione del terzo parametro"}
      };
      return paramInfo;
   }
   private class ReboundActionListener implements ActionListener
  {
     public void actionPerformed(ActionEvent event)
     {
        //if(game.setting.viewTime())
        //  repaint();
        if (timeGame > 0)
        {
           timeGame--;
           repaint();
        }
     }
  }
}
Provate ad eseguire l'applet e fatemi sapere se esiste una soluzione!!
Grazie mille.

Un amico troppo in gamba mi ha risolto il problema..la posto qui per
dare la soluzione a chi la stia cercando:
Basta aggiungere al metodo paint
g.clearRect(0,0, xCanvas, yCanvas);
dove, naturalmente xCanvas e yCanvas sono le dimensioni della "tela"..
(PS. vi consiglio di usare il doppio buffer x non avere problemi di
"sfarlfallamento".)
Ciao e un grazie speciale al mio amico che mi ha dato la soluzione!