0

我正在阅读 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) 调用这些函数的顺序和时间是什么?

我在这里想念什么?

4

0 回答 0