BufferedImage在用Java完全绘制之前绘制到JPanel

时间:2012-06-28 19:52:06

标签: java animation graphics drawing drawimage

我找不到任何答案。我试图在Java中使用循环中的活动绘画。我创建了一个新的BufferedImage,并在我的paint方法中获取其图形,绘制其图形正常Image以及各种形状,如fillRect() etc.然后我将BufferedImage绘制到{{ 1}}(带有变量名称​​ canvas )图形。

JPanel

为什么我在JPanel中看到所有绘制的形状,但是没有Image,只有延迟,我认为首先将所有内容都绘制到BufferedImage,然后立即在另一个图形上绘制(不是什么缓冲区?) 。有人可以向我解释一下吗?什么线程应该在图形对象上绘制东西?其中此图像绘制正在运行(使用活动渲染时,不调用paintComponent())

1 个答案:

答案 0 :(得分:0)

  

什么线程应该在图形对象上绘制东西?

你想要的任何线程。我不久前写了一个GIS应用程序,我不得不做这种操作(绘制图像和形状并显示它们)。以下是我的进展:

  1. 有一个后台线程,将图像和所有形状绘制到BufferedImage
  2. JPanel.paintComponent()中获取后台线程的结果并将其绘制到JPanel的图形中
  3. 运行这段代码

    canvas.getGraphics().drawImage(buffer, 0, 0, 500, 500, null);
    
    paintComponent之外的

    确实是一个坏主意,可能会解释您遇到的问题。这是因为您从canvas.getGraphics()获得的图形不适用于渲染,但仅适用于打印等操作

    你绝对应该在BufferedImage方法中绘制JPanel.paintComponent(),以解决很多问题