-1

そこで、BasePanel という抽象的な JPanel を作成しました。その中で、私は次のようなダブルバッファコードを使用します:

public void paint(Graphics g) {
    dbImage = createImage(getWidth(), getHeight());
    dbg = dbImage.getGraphics();
    paintComponent(dbg);
    g.drawImage(dbImage, 0, 0, this);
    repaint();
}

public void paintComponent(Graphics g) {
    g.setColor(Color.BLACK);
}

そして、それを別のパネルで拡張するとき、ペイントコンポーネントメソッドをオーバーライドするだけでダブルバッファになるのではないかと思っていましたか? したがって、ペイント メソッドを呼び出す必要さえありません。

public class StartScreen extends BasePanel {
    @Override
    public void paintComponent(Graphics g) {
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, getWidth(), getHeight());

        g.setColor(Color.WHITE);
        g.drawString("Animation Screen", 175, 150);;

        repaint();

    }

}
4

2 に答える 2

5
  1. paint() をオーバーライドしないでください。
  2. どの描画メソッドでも repaint() を呼び出さないでください。
  3. getGraphics() メソッドを使用しないでください。既に Graphics オブジェクトを持っています。
  4. カスタム ペイントは、paintComponent() メソッドで実行されます。呼び出すことを忘れないでください。super.paintComponent(...)

ダブル バッファリングは、親コンポーネントから自動的に継承されます。

于 2013-07-23T01:21:33.327 に答える
3

申し訳ありませんが、あなたはひどい「ダブルバッファリング」コードです。paintComponent をオーバーライドするだけで、ダブル バッファリングされます。paint または paintComponent で repaint を呼び出さないでください。ボーダーと子の描画方法を変更するつもりがない限り、ペイントをオーバーライドしないでください。

于 2013-07-23T01:21:28.783 に答える