我找不到任何答案。我正在尝试在 Java 中循环使用主动绘画。我创建了一个新BufferedImage
,并在我的绘画方法中获取其图形,绘制到其图形正常Image
以及各种形状,例如fillRect() etc.
然后将BufferedImage
绘制到JPanel
(带有变量名称画布)图形。
Graphics gr = buffer.createGraphics();
gr.drawImage(img, 0, 0, 500, 500, null);
for (int i = 0; i<200; i++){
gr.drawOval(i*10,i*20,50,50);
etc.
}
gr.dispose();
canvas.getGraphics().drawImage(buffer, 0, 0, 500, 500, null);
为什么我在 JPanel 中看到所有绘制的形状但没有图像,这只会延迟,我认为首先将所有内容都绘制到 BufferedImage 上,然后立即绘制在另一个图形上(这不是缓冲区的内容吗?有人可以向我解释一下吗?什么线程应该在图形对象上绘制内容?此图像绘图在其中运行(使用活动渲染时,不调用paintComponent())
什么线程应该在图形对象上绘制内容?
您想要的任何线程。不久前,我编写了一个GIS应用程序,我必须执行此类操作(绘制图像和形状并显示它们)。以下是我的做法:
- 有一个背景线程,将图像和所有形状绘制到
BufferedImage
- 在您的
JPanel.paintComponent()
从后台线程获取结果并将其绘制到JPanel的图形中
运行这段代码
canvas.getGraphics().drawImage(buffer, 0, 0, 500, 500, null);
在paintComponent
之外确实是一个坏主意,可能会解释您遇到的问题。这是由于您从canvas.getGraphics()
获得的图形不是用于渲染,而仅用于打印等操作
您绝对应该以JPanel.paintComponent()
方法绘制BufferedImage
,这将解决您的很多问题