JPanel重绘不起作用

时间:2015-12-24 19:01:04

标签: java graphics jpanel paintcomponent repaint

我正在使用swing和awt库在java中开发一个图形项目。我正在寻找一种方法,允许我在我的JPanel上绘制得非常快。我尝试了各种方法:重写paintComponent,调用repaint(x,y,width,heigth)..但在所有情况下我都需要重新绘制所有屏幕!我有一个背景和一个小图像在它前面,每隔几次就会改变一次。我正在寻找一种方法,允许我在屏幕上仅绘制小图像,我也不需要重新绘制背景,因为它总是相同的,并且小图像总是在相同的坐标上。例如在C ++中我绘制了背景,然后我只使用putimage(graphics.h)在它前面绘制了小图像,因此它非常快。有人有一些提示吗?

2 个答案:

答案 0 :(得分:0)

提示:

  • 将静态图像绘制到BufferedImage,然后使用Graphics#drawImage(...)
  • 在paintComponent中绘制它
  • 您确实知道repaint(...)方法已超载且一个重载可以接受Rectangle参数,从而限制了重新绘制的范围。

答案 1 :(得分:0)

我有一些游戏编程经验,通常将JPanel用作画布。现在要绘制它,你会写一个简单的循环,它不断缓冲图像,然后将其绘制到屏幕上。因此,在初始化时,您将创建一个Graphics或Graphics2D对象,该对象将传递给buffer()方法。在使用Graphics of Graphics绘制BufferedImage之后,一些paint()方法将BufferedImage绘制到屏幕上。

当仅绘制背景一次时,先前绘制的图像仍然可见。如果您的所有图像大小相同,则无需费心,但我仍然建议重新绘制背景。

看一下 Java中的杀手游戏编程这本书可以获得更多信息,这是一个很好的参考。