1

私は今、JApplet を書いています。super.paint() を呼び出すたびに、アプレットがちらつきます。ダブル バッファリング (画像に描画してからその画像をレンダリングする) を使用していますが、super.paint() が画面などをクリアして、ダブル バッファを無効にしていると思います。

paintComponents() を使用することになっていることはわかっていますが、何らかの理由で、「currentScreen.Draw(g)」を呼び出すと、画面の描画が表示されません。

誰でもこれで私を助けることができますか?

public void paint(Graphics g)
{   

    super.paint(g);//Remove this and it works, but the JApplet background color will be gone, and everything will be white.

    currentScreen.Draw(g);
}

画面描画方法

public void Draw(Graphics g)
{

    if(buffer != null)
        g.drawImage(buffer, 150, 0, null);
    //g.drawString(drawstring, x, y);
}
4

1 に答える 1

4

ペイントを使用したり、JApplet で直接描画したりしないでください。代わりに、JPanel の paintComponent メソッドを描画し、そのメソッドの最初の行として super.paintComponent(g) を呼び出します。その JPanel を JApplet の contentPane に追加して、アプレットが表示できるようにします。

編集1また、これはまったく異なることを行うため、これにpaintComponent
を使用することはできません。ここでも paintComponent を使用しますが、JPanel (または JComponent 自体) などの JComponent から派生したコンポーネントでのみ使用します。

編集 2 また、常に @Override を paintComponent メソッドの上に置いて、実際にスーパー メソッドをオーバーライドしていることを確認します。

于 2011-08-10T01:18:23.617 に答える