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) これらの関数が呼び出される順序と時期は?
ここで何が欠けていますか?