Java中的双缓冲

Alf*_*red 2 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);
  }
Run Code Online (Sandbox Code Playgroud)

问候

Abs*_*aos 6

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

双缓冲

这里找到的java教程

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

 private Image i;
 private Graphics graph;

 if(i==null)
{
    i=createImage(getWidth(), getHeight());
    graph=i.getGraphics();
}
Run Code Online (Sandbox Code Playgroud)

然后使用此方法将背景颜色绘制到图像上

graph.setColor(getBackground());
graph.fillRect(0, 0, getWidth(),getHeight());
Run Code Online (Sandbox Code Playgroud)

然后设置前面准备绘图.

graph.setColor(getForeground());
paint(graph); /draws
Run Code Online (Sandbox Code Playgroud)

最后将后缓冲区拉到主表面上.

g.drawImage(i,0,0,this);
Run Code Online (Sandbox Code Playgroud)