0

Herbert Schildt の Java 2 5e を読んでいます。アプレットに関する章で、彼は次のように述べています。

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()。しかし、これはまだ観測されている点滅からではありません。

update()2)呼び出しの既定の実装の場合paint()、後者の方法では、なぜ をpaint()呼び出す必要がありますupdate()か?

3) これらの関数が呼び出される順序と時期は?

ここで何が欠けていますか?

4

0 に答える 0