0

如何绘制不会更改为图像/缓冲区的 Java2D 模拟的一部分,这样我就不必每次都重新绘制它的基元?

我有一部分 Java2D 模拟需要我绘制数千条小线。但是,应用程序的这一部分在绘制后不会改变,因此每次循环迭代(进行主动渲染)重新绘制数千个图元是没有意义的。

那么,我用什么对象来绘制和保存它,然后让我简单地将整个图像绘制到我的画布上,然后在它上面绘制什么变化?

4

2 回答 2

3

可以绘制到 a BufferedImage,然后再将 的内容绘制BufferedImage到 Swing 组件,例如JPanel.

为了绘制到 a BufferedImage,可以使用createGraphics来获取Graphics2D图像的上下文:

BufferedImage img = new BufferedImage(width, height, type);
Graphics2D g = img.createGraphics();
// do drawing using the Graphics2D object.
g.dispose();

然后稍后,通过覆盖该方法将 的内容绘制BufferedImage到 a :JPanelpaintComponent

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(img, 0, 0, null);  // Draw img onto the JPanel.
}
于 2009-10-25T02:29:47.387 回答
0

请注意,您还应该覆盖 getPreferredSize() 以返回图像的大小,或在 JPanel 上设置与图像大小相等的首选大小。如果您不这样做,您的 JPanel 子类将会出现布局问题。

于 2009-10-25T15:43:14.730 回答