java Swing渲染。。。它是否总是必须是repaint()和paintComponent()?
在我的程序中,我将Swing窗口用于GUI,我知道我应该使用重绘和paintComponent方法来渲染Swing组件。我还有几个需要在主窗口内渲染的自定义类对象。为了便于理解,我的程序是一个游戏,需要每秒渲染60次移动对象
在我观看的一个游戏开发教程中,这家伙使用了带有画布的Jframe,但他没有使用paintComponent方法。他只是简单地创建了自己的render()方法,使用从创建缓冲策略中获得的图形上下文绘制所有图形
那么,如果这是可行的(确实如此),为什么每个人都说要使用paintComponent方法?它们之间到底有什么区别
如果我使用paintComponent方式做事,我将如何使用bufferStrategy
# 1 楼答案
Canvas
是一个AWT组件,使用BufferStrategy
,您接管绘制过程,并负责更新Graphics
上下文,并安排将其推送到硬件/屏幕这通常被称为“活动绘制”,因为你会不断地(假设帧速率不变)更新缓冲区
Swing使用被动绘制过程,因此您永远不知道何时可能会发生绘制过程。Swing有自己的机制来决定应该重新绘制什么以及何时重新绘制。使用
repaint
,您可以向这些机制请求重新绘制组件,但不能保证绘制周期会因此启动如果使用任何Swing组件进行绘制,则必须使用
repaint
和paintComponent
,因为Swing负责提供可以绘制的上下文如果您想使用
Canvas
,那么可以使用BufferStrategy
本质上,它们是不同的绘画方法。但是请记住,如果您使用
BufferStrategy
,您将失去所有Swing API,您不能用这种方法使用Swing组件,因为它们不是设计为以这种方式工作的