Java中的双缓冲

时间:2012-11-23 17:10:51

标签: java doublebuffered

我在互联网上找到了这个双缓冲代码,但没有解释。我在这段代码中有点困惑。

  • 为什么使用Image“i”?如果要使用一次它有什么用?

  • 为什么我们已经设置了颜色时,我们是否为前景颜色指定了更改颜色?

  • g.drawImage()方法在做什么?

以下是代码:

public void update(Graphics g)
{
    if(i==null)
    {
        i=createImage(getWidth(), getHeight());
        graph=i.getGraphics();
    }

    graph.setColor(getBackground());
    graph.fillRect(0, 0, getWidth(),getHeight());
    graph.setColor(getForeground());

    paint(graph);

    g.drawImage(i,0,0,this);
  }

此致

2 个答案:

答案 0 :(得分:6)

Double Buffering的基本思想是在屏幕外创建图像,然后立即显示它。

Double Buffering

从找到的here

的java教程中

你在那里的代码首先创建一个图像,在第一次通过这个位作为你的“后缓冲区”,我可能是一个字段,如

 private Image i;
 private Graphics graph;

 if(i==null)
{
    i=createImage(getWidth(), getHeight());
    graph=i.getGraphics();
}

然后使用此

将背景颜色涂在图像上
graph.setColor(getBackground());
graph.fillRect(0, 0, getWidth(),getHeight());

然后设置前面准备好绘图。

graph.setColor(getForeground());
paint(graph); /draws

最后将后缓冲区拉到主表面。

g.drawImage(i,0,0,this);

答案 1 :(得分:2)

图形操作全部在从Graphics获得的i上执行,Graphics是内存中的位图。

完成后,位图将被绘制到“真实”(屏幕)g对象i上。因此,用户永远不会看到半成品图纸,这消除了闪烁。

第一次分配字段{{1}}然后重复使用,因此它不仅使用一次。