如何绘制不会更改为图像/缓冲区的Java2D模拟的一部分,这样我每次都不必重绘它的基元?
我有一部分Java2D模拟,需要我绘制数千条小行。但是,应用程序的这一部分一旦绘制就不会改变,因此每次循环迭代(进行活动渲染)重新绘制数千个基元是没有意义的。
那么,我使用什么对象来绘制并保存它,然后允许我简单地将整个图像绘制到我的画布上,然后在其上绘制哪些更改?
答案 0 :(得分:3)
可以抽出一个BufferedImage
,然后将BufferedImage
的内容绘制到一个Swing组件,就像JPanel
一样。
为了绘制到BufferedImage
,可以使用createGraphics
获取图片的Graphics2D
上下文:
BufferedImage img = new BufferedImage(width, height, type);
Graphics2D g = img.createGraphics();
// do drawing using the Graphics2D object.
g.dispose();
然后,通过覆盖paintComponent
方法将BufferedImage
的内容绘制到JPanel
:
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, null); // Draw img onto the JPanel.
}
答案 1 :(得分:0)
请注意,您还应覆盖getPreferredSize()以返回图像的大小,或者在JPanel上设置首选大小等于图像的大小。如果你不这样做,你的JPanel子类就会出现布局问题。