我正在阅读Herbert Schildt的Java 2 5e。在他关于Applets的章节中,他说,
update()的默认版本首先使用默认背景颜色填充applet,然后调用paint()。
因此,当applet使用以下代码启动(或调整大小)时,我会遇到闪烁:
import java.awt.*;
import java.applet.*;
public class awt_ extends Applet{
public void init() {
}
public void start() {
}
public void paint(Graphics g) {
setBackground(Color.BLACK);
setForeground(Color.white);
g.drawString("this", 20, 20);
}
public void stop() {}
public void destroy() {}
}
到目前为止,这么好。该书和this page建议覆盖update()
并将绘画代码移至update()
。该网站还提到了,
实现paint()的简单方法是简单地调用update()
所以我将我的代码修改为以下内容,期望不会发生闪烁,但它仍然存在!这是修改后的代码:
import java.awt.*;
import java.applet.*;
public class awt_ extends Applet{
public void init() {
}
public void start() {
}
public void paint(Graphics g) {
update(g);
}
public void update(Graphics g) {
setBackground(Color.BLACK);
setForeground(Color.white);
g.drawString("this", 20, 20);
}
public void stop() {}
public void destroy() {}
}
1)根据本书,在update()
之前调用paint()
。因此,在调用update()
之前,我被覆盖的paint()
不应清除背景。但是,这仍然不会从仍然观察到的闪烁中发生。
2)如果update()
的默认实现调用paint()
,那么使用后一种方法,为什么paint()
会调用update()
?
3)调用这些函数的顺序是什么时候?
我在这里缺少什么?