AWT-以什么顺序调用update()和paint()方法?

时间:2013-03-13 15:34:09

标签: java applet awt

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

我在这里缺少什么?

0 个答案:

没有答案