我正在阅读 Herbert Schildt 的 Java 2 5e。在关于 Applets 的章节中,他说,
update() 的默认版本首先使用默认背景颜色填充小程序,然后调用paint()。
因此,当小程序使用以下代码启动(或调整大小)时,我会遇到闪烁:
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() {}
}
到目前为止,一切都很好。这本书和这个页面建议覆盖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) 调用这些函数的顺序和时间是什么?
我在这里想念什么?