-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);
}

然后在另一个面板上扩展它时,我想知道如果我只覆盖paintComponent方法,它是否仍然是双缓冲?所以我什至不需要调用paint方法

一个例子

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 回答