Hej
Grunden til din applet flimrer er at du ikke bruger double buffering! Hver gang du repainter din applet bliver update metoden kaldt, update metoden sletter hele din applet for herefter at kalde paint, det betyder som du sikkert selv har regnet ud, at du har et kort øjeblik hvor der ikke står noget på din applet. Måden at løse det på er at overskrive update metoden med din egen og sørge for den ikke sletter din applet inden den tegner den igen, dette kan gøres ved at have to "Graphics" en af dem er en baggrundsbuffer du tegner det næste billede på og herefter bytter rundt på "baggrundsbufferen" og "forgrundsbufferen", følgende kode kan illustrere dette:
private Image dbImage;
private Graphics dbg;
...
public void update(Graphics g) {
// initialize buffer
if (dbImage == null) {
dbImage = createImage(this.getSize().width, this.getSize().height);
dbg = dbImage.getGraphics();
}
dbg.setColor(getBackground());
dbg.fillRect(0, 0, this.getSize().width, this.getSize().height);
dbg.setColor(getForeground());
paint(dbg);
g.drawImage(dbImage, 0, 0, this);
}
Det første du skal gøre at tilføje to nye private attributter til din applet. Herefter kan du tilføje den kode der står ovenfor og køre det uden problemer, og flimmer. Håber det hjælperm jeg har ofte brugt denne kode og har ikke haft problemer med den.
/Brian
hej
jeg har lidt problemer med en rulle tekst, den flimre når den kører. hvordan stopper jeg dette flimer??
Koden:
import java.applet.*;
import java.awt.*;
public class simpel extends Applet implements Runnable{
int ypos = 200;
String text = "Hallo world";
Thread traad;
public void init() {
}
public void paint(Graphics g) {
g.drawString(text,20,ypos);
}
public void run(){
while(traad != null){
ypos--;
if(ypos == 0){
ypos = 200;
}
try{
Thread.sleep(25);
}catch(InterruptedException e){}
repaint();
}
}
public void start(){
if(traad == null){
traad = new Thread(this);
traad.start();
}
}
public void stop(){
if(traad != null){
traad.stop();
traad = null;
}
}
}