Swing渲染...它总是必须是repaint()和paintComponent()吗?

时间:2014-09-23 00:22:58

标签: java swing paintcomponent

在我的程序中,我使用Swing窗口作为我的GUI,我知道我应该使用repaint和paintComponent方法来渲染swing组件。我还有几个需要在主窗口内呈现的自定义类对象。为了便于理解,我的程序是一个游戏,它需要每秒渲染60次移动物体。

在我观看的游戏开发教程中,这个人使用了Canvas的Jframe,但他没有使用paintComponent方法。他只是创建了自己的render()方法,使用从创建bufferStrategy获得的图形上下文来绘制所有图形。

所以,如果它有效(它确实如此),为什么每个人都说使用paintComponent方法以及它们之间究竟有什么区别呢?

如果我使用paintComponent做事的方式,我将如何使用bufferStrategy?

1 个答案:

答案 0 :(得分:3)

  

在我观看的游戏开发教程中,该人使用了Canvas的Jframe,但他没有使用paintComponent方法。他只是创建了自己的render()方法,使用从创建bufferStrategy获得的图形上下文来绘制所有图形。

Canvas是一个AWT组件,使用BufferStrategy,您接管绘画过程并负责更新Graphics上下文并安排它推送到硬件/屏幕。< / p>

这通常被称为“主动绘画”,因为你经常(人们会以恒定的帧速率假设),更新缓冲区。

Swing使用被动绘制过程,因此您永远不知道何时可能发生绘制过程。 Swing有自己的机制来确定应该重新绘制的内容以及何时重新绘制。使用repaint,您可以向这些机制请求重新绘制组件,但无法保证将因此启动绘制周期。

如果您使用任何Swing组件进行绘画,则必须使用repaintpaintComponent,因为Swing负责提供您可以绘制的上下文。

如果您想使用Canvas,则可以使用BufferStrategy代替。

基本上,它们是不同的绘画方法。但请记住,如果你使用BufferStrategy,你会失去所有的Swing API,你不能使用这种方法使用Swing组件,因为它们不是以这种方式工作的......