java - Java 中的双缓冲

标签 java doublebuffered

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

  • 为什么使用图像“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);
  }

问候

最佳答案

双缓冲的基本思想是在屏幕外创建图像,然后一次将其全部显示。

Double Buffering

从java教程中找到here

您那里的代码首先在第一种方式中创建一个图像,作为您的“后台缓冲区”,i 可能是一个字段,例如

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

关于java - Java 中的双缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13533344/

相关文章:

java - 从类路径条目获取文件列表

java - 连续双缓冲解决方案不起作用

c# - 使用 C# 双缓冲有负面影响

java - 我需要帮助了解如何在 Java 小程序中编写双缓冲代码

winapi - 抑制 WM_ERASEBKGND 的正确方法是什么?

接受泛型类的java方法,创建该类的新实例并调用其方法

java - 使用 Java API 的无符号整数

类的 Java 对象不返回相同的值

java - 连接 HSQL 数据库管理器时无法从 Java 代码连接到 HSQL 数据库

delphi - 如何消除TPaintBox右边缘的闪烁(例如调整大小时)