|
I wrote a text marquee effect in the applet. If the double buffering technology (update (Graphics g) method is used, those texts will overlap. If not used, this problem will not occur. But do not use double If the buffering technology is used, the displayed interface will flash.
How can I solve this problem?
Or give an example
Here is the program code:
import java.awt. *;
import java.applet. *;
import java.util.Date;
public class Clock extends Applet implements Runnable
{
Thread clockThread;
Font font;
String s = "Okay !!!!";
int count = 0;
public void init () {
Ranch
font = new Font ("TimesRoman", Font.BOLD, 48);
}
public void start ()
{
if (clockThread == null)
clockThread = new Thread (this, "Showtime");
clockThread.start ();
Ranch
}
public void run ()
{
// while (clockThread! = null)
while (true)
{
repaint ();
try {
clockThread.sleep (300);
}
catch (InterruptedException e) {}
}
}
Ranch
public void paint (Graphics g) {
double a, b, c, d, e, f;
int h, i, j, k, l, m;
Date now = new Date ();
a = now.getSeconds ();
b = now.getMinutes ();
c = now.getHours ();
d = (a-15) * Math.PI / 180 * 6;
e = (b-15) * Math.PI / 180 * 6;
f = (c-15) * Math.PI / 180 * 6;
h = (int) (Math.sin (d) * 65);
i = (int) (Math.cos (d) * 65);
j = (int) (Math.sin (e) * 54);
k = (int) (Math.cos (e) * 54);
l = (int) (Math.sin (f) * 44);
m = (int) (Math.cos (f) * 44);
g.translate (100,100);
play (getDocumentBase (), "a.wav");
g.drawLine (0,0, i, h);
g.drawLine (0,0, k, j);
g.drawLine (0,0, m, l);
g.drawString (now.getHours () + ":" + now.getMinutes () + ":" + now.getSeconds (),-10,100);
char [] s1 = s.toCharArray ();
int n1;
String q = new String ();
for (n1 = count; n1 <s1.length; n1 ++) {
q + = s1 [n1];
}
count ++;
g.drawString (q, 100,100);
if (count == s1.length)
{
count = 0;
}
g.drawString (s, 100,110);
g.drawString (s, 160,120);
}
public void update (Graphics g) {// Double buffering technology
paint (g);
}
public void stop ()
{
clockThread.stop ();
}
}
Let's take a look |
|