Newsgroup: it.comp.java
Titolo: Sgradevole effetto

Ho fatto una classica applet che scrolla del testo verticalmente e
fnziona a meraviglia se non fosse per uno sgradevole sfarfallio che
penso sia causato dal repaint.
Il metodo è quello classico 
thread.sleep(tot);
repaint();
Ma a vedersi non è piacevole.
L'url è il seguente:
http://www.vampiripavia.com/ScrollAreanet/ScrollAreanet.html
Sapete dirmi come eliminare quello sfarfallio?
Grazie.
 ------------------------------------
 Il peccato di Caino
 La seduzione del male
 
www.vampiripavia.com
-------------------------------------
                *IcarusDream*
  -Dove un sogno è ancora libero-


http://www.vampiripavia.com/ScrollAreanet/ScrollAreanet.html
hai gia' provato a ridefinire update
public void update(Graphics g)
{
	paint(g);
}
se l'hai gia' fatto allora devi postare il codice
ciao_O
_______________________________________
http://jame.sourceforge.net
 
[ last release jame4.2e ]
_______________________________________
http://digilander.iol.it/schiele

}
Si e forma un effetto strisciata.
Posto il codice, ma è lunghetto, quindi non mi aspetto nulla.
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;
import java.io.*;
import java.net.*;
public class scrollareanet extends Applet implements Runnable{
Thread t = null;
Font f;
FontMetrics fm;
Vector v;   
Vector vRect;
Image imgUp;
Image imgDn;
Image imgStop;
String direzione = "up";
//Parametri
String stile;
String background;
String foreground;
URL sorgente;
int overID;
int size;
int speed;
int width;
int height;
int pos_y;
boolean alive;
Rectangle bordo;
	public void init(){
                setLayout(new BorderLayout());
 
		//Leggi parametri
		size = Integer.parseInt(getParameter("size"));
		stile = getParameter("stile");	
		speed = Integer.parseInt(getParameter("speed"));
                width = Integer.parseInt(getParameter("width"));
                height = Integer.parseInt(getParameter("height"));
                background = getParameter("background");
                foreground = getParameter("foreground");
 
                pos_y = 50 - size + 5;
                overID = -1;
 
                //Carica l'immagine
                imgUp =
getImage(getDocumentBase(),getParameter("imgUp"));
                imgDn =
getImage(getDocumentBase(),getParameter("imgDn"));
                imgStop =
getImage(getDocumentBase(),getParameter("imgStop"));
 
                //vert = new Scrollbar(Scrollbar.VERTICAL,0,10,0,150);
                //add(vert,"East");
 
		f = new Font(stile, Font.BOLD, size);
                fm = getFontMetrics(f);
                v = new Vector();
                vRect = new Vector();
                bordo = new Rectangle(1,1,width,height);             
 
		setFont(f);
		setBackground(Color.white);
                setForeground(Color.black);
 
                importText();
 
		t = new Thread(this);
		t.setName("Primo Thread");
		t.start();
		t.suspend();
	}
 
 
	public void start(){
            try{    //Ritardo iniziale
                t.sleep(1000);
            }catch (Exception e){
                //Nessuna gestione
            }
		t.resume();
	}
 
        public void importText(){
 
            String line;
 
            try{
                sorgente = new
URL(getCodeBase(),getParameter("sorgente"));
                DataInputStream iStream = new
DataInputStream(sorgente.openStream());
            while ((line = iStream.readLine()) != null){
                v.addElement(line); 
            }
            }catch (Exception e){
                //Nessuna gestione
            }
        }
 
	public void run(){	
		for(;;){
			try{	
                            if (direzione == "up"){
				pos_y--;
                            }else{
                                pos_y++;
                            }
			    repaint(0,15,width-20,120);
                            t.sleep(speed);				
			}catch (Exception e){
				//Nessuna gestione dell'eccezione	
			}
		}
	}
 
        public boolean mouseMove(Event evt, int x, int y){
            for (int k=0; k < vRect.size(); k++){
                if (((Rectangle)vRect.elementAt(k)).inside(x,y)){
                   overID = k;
                   repaint();
                }
            }
            return true;
        }
	public void paint(Graphics g){
 
            vRect.removeAllElements();
 
            g.drawImage(imgUp,(width-15),0,this);
            g.drawImage(imgDn,(width-15),135,this);
            g.drawImage(imgStop,(width-12),((height/2)-5),this);
 
            g.setClip(0,15,width,120);
 
            for (int q = 1; q <= v.size(); q++){
                int y = pos_y + (q*20);
                int linkWidth =
fm.stringWidth(v.elementAt(q-1).toString());
                int linkHeight = fm.getDescent() + fm.getAscent();
 
               if (overID == (q-1)){
                   g.setColor(Color.red);
g.drawString(v.elementAt(q-1).toString(),(width-linkWidth)/2,y);  
               }else{
                    g.setColor(Color.black);
g.drawString(v.elementAt(q-1).toString(),(width-linkWidth)/2,y);  
               }
 
                vRect.addElement(new
Rectangle(1,y-linkHeight,(width-20),16)); 
            }    
 
            overID = -1;
 
                //Riprende lo scroll dal bordo in basso
		if (pos_y == (0-(v.size()*20 + 10))){
			t.suspend();
 
			pos_y =150;
 
			t.resume();
		}
 
                //Riprende lo scroll dal bordo in alto
                if (pos_y == (height + size)){
                    t.suspend();
 
                    pos_y = (0-(v.size()*20 + 10));
 
                    t.resume();
                }
	}
 
        public void getPage() throws MalformedURLException{
            URL url = new URL("
http://www.areanet.it
");
            getAppletContext().showDocument(url,"_new");
        }
 
        public boolean mouseDown(Event evt, int xD, int yD){
 
            for (int k=0; k < vRect.size(); k++){
                if (((Rectangle)vRect.elementAt(k)).inside(xD,yD)){
                    try{
                        getPage();
                    }catch(MalformedURLException e){
                        //nessuna gestione
                    }
                }
            }
 
            //Scroll Up
            if (yD < 15){
                direzione = "up";
                t.resume();
            }
 
            //Scroll down
            if (yD > (height-15)){
                direzione = "down";
                t.resume();
            }
 
            //Stop pscrolling
            if ((yD > (height/2)-5) && (yD < (height/2)+5) && (xD >
(width-12)) && (xD < (width-2))){
                t.suspend();
            }
 
             return true;
        }
 
        public boolean mouseEnter(Event evt, int x, int y){
            t.suspend();
            alive = false;
 
            return true;
        }
 
        public boolean mouseExit(Event evt, int x, int y){
            t.resume();
            alive = true;
 
            return true;


Usa il double buffering:
public void update(Graphics g) {
    paint(g);
}
public void paint(Graphics g) {
    Image off=createImage(dimx,dimy);
    Graphics offg=off.getGraphics();
    //Ora tutto cio che devi disegnare lo fai usando offg al posto di g
    //es: offg.drawString("Ciao",40,40);
    ....
    ....
    g.drawImage(off,0,0,this);
}//end paint
E addio sfarfallii!!

 va
in giro a dire:

Perfetto!
Grazie!
Adesso al sito
http://www.vampiripavia.com/ScrollAreanet/ScrollAreanet.html
puoi vedere il frutto del tuo consiglio :)
Niente sfarfalii....
