Java-获取图形

Java-获取图形,java,swing,graphics,awt,Java,Swing,Graphics,Awt,我正在制作一个java swing游戏。我听说swing组件不使用活动渲染(您只能覆盖绘制方法),因此,我一直在画布上使用BufferStrategy。现在,我从JComponent和JPanel中发现了getGraphics()方法。如果我们可以在swing组件中进行活动渲染,为什么游戏教程仍然覆盖paint()和paintComponent()?永远不要使用getGraphics,它可以返回null,只不过是上一个绘制周期的快照而已 在其上绘制的任何内容都将在下一个绘制周期中删除。在Swin

我正在制作一个java swing游戏。我听说swing组件不使用活动渲染(您只能覆盖绘制方法),因此,我一直在画布上使用BufferStrategy。现在,我从JComponent和JPanel中发现了
getGraphics()
方法。如果我们可以在swing组件中进行活动渲染,为什么游戏教程仍然覆盖
paint()
paintComponent()

永远不要使用
getGraphics
,它可以返回
null
,只不过是上一个绘制周期的快照而已

在其上绘制的任何内容都将在下一个绘制周期中删除。在Swing中,您无法控制绘制过程,绘制周期可能会由于多种原因而启动,其中许多原因您无法控制或可能会得到通知(调用绘制时除外)

基本答案是,如果您想控制绘制过程,必须使用
缓冲策略
或实现自己的屏幕外绘制例程。您无法在Swing API中实现真正的活动绘制过程,您可以在一定程度上伪造它,但是Swing仍然能够在认为合适时执行自己的绘制周期


查看并获取有关如何在Swing中进行绘制的更多详细信息

永远不要使用
getGraphics
,它可以返回
null
,只不过是上一个绘制周期的快照而已

在其上绘制的任何内容都将在下一个绘制周期中删除。在Swing中,您无法控制绘制过程,绘制周期可能会由于多种原因而启动,其中许多原因您无法控制或可能会得到通知(调用绘制时除外)

基本答案是,如果您想控制绘制过程,必须使用
缓冲策略
或实现自己的屏幕外绘制例程。您无法在Swing API中实现真正的活动绘制过程,您可以在一定程度上伪造它,但是Swing仍然能够在认为合适时执行自己的绘制周期


查看并了解有关如何在Swing中进行绘制的更多详细信息

我不建议使用paint()和paintComponent()方法。。。一般来说,对于游戏,我可以将图像渲染到JPanel上,也可以直接渲染到JFrame中(当然,这取决于游戏的类型)。好吧,除了在事件调度线程上,你不能使用Swing组件,那么为什么不使用现有的绘制机制呢?否则,您将重新发明轮子。如何在不重写的情况下将图像渲染到Jpanel中?如果使用getGraphics,返回的图形对象不在事件调度线程中?永远不要使用
getGraphics
,它可以返回
null
不过是上一个绘制周期的快照而已。在其上绘制的任何内容都将在下一个绘制周期中删除。在Swing中,您无法控制绘制过程,绘制周期可能会由于多种原因而启动,其中许多原因您无法控制或可能会收到通知(调用绘制时除外),我不建议使用paint()和paintComponent()方法。。。一般来说,对于游戏,我可以将图像渲染到JPanel上,也可以直接渲染到JFrame中(当然,这取决于游戏的类型)。好吧,除了在事件调度线程上,你不能使用Swing组件,那么为什么不使用现有的绘制机制呢?否则,您将重新发明轮子。如何在不重写的情况下将图像渲染到Jpanel中?如果使用getGraphics,返回的图形对象不在事件调度线程中?永远不要使用
getGraphics
,它可以返回
null
不过是上一个绘制周期的快照而已。在其上绘制的任何内容都将在下一个绘制周期中删除。在Swing中,您无法控制绘制过程,绘制周期可能会因为多种原因而启动,其中许多原因您无法控制或可能会被通知(调用绘制时除外),但oracle官方API建议我这样做:public Graphics getGraphics()返回此组件的图形上下文,这样可以在零部件上绘制。使用此方法获取图形对象,然后调用该对象上的操作以在组件上绘制。如果我了解的话,使用swing可以模拟活动渲染,但不能像在awt中那样使用,对吗?@LePloit不,它不是这样工作的,事实上,
getGraphics
是不应该以这种方式公开的方法之一。它所做的是返回上次用于绘制组件的
图形
上下文。由于绘制具有破坏性,因此下次重新绘制组件时,您在
图形
上下文中绘制的任何内容都将丢失,这可能会导致闪烁…非常烦人。最好的办法是,不要使用
getGraphics
,它确实不能满足您的需要。15年来,我从来没有必要给它打电话。Swing使用被动渲染方法,您无法更改它。但是官方的oracle API建议我这样做:public Graphics getGraphics()返回此组件的图形上下文,它允许您在组件上绘制。使用此方法获取图形对象,然后调用该对象上的操作以在组件上绘制。如果我了解的话,使用swing可以模拟活动渲染,但不能像在awt中那样使用,对吗?@LePloit不,它不是这样工作的,事实上,
getGraphics
是不应该以这种方式公开的方法之一。它所做的是返回上次用于绘制组件的
图形
上下文。由于绘制具有破坏性,因此下次重新绘制组件时,您在
图形
上下文中绘制的任何内容都将丢失,这可能会导致闪烁…非常烦人。最好的办法是,不要使用
getGraphics
,它真的不起什么作用