Java 扩展JPanel为2D游戏创建绘图面是否合适?

Java 扩展JPanel为2D游戏创建绘图面是否合适?,java,swing,user-interface,Java,Swing,User Interface,我正在将2D游戏从小程序转换为JFrame。我知道我应该向JFrame中添加一个JPanel,并使用JPanel作为我的绘图表面,但我不确定应该子类化什么。我曾尝试使用JFrame,但我已经读到扩展JFrame通常是不必要的,也是一个坏主意(我没有添加任何额外的功能,所以这是有意义的)。我需要重写JPanel的paintComponent()方法,所以现在我倾向于扩展JPanel。有没有更好的方法来创建2D游戏界面,或者扩展JPanel并将其添加到JFrame是一种合适的方法?没有更好的方法,这

我正在将2D游戏从小程序转换为JFrame。我知道我应该向JFrame中添加一个JPanel,并使用JPanel作为我的绘图表面,但我不确定应该子类化什么。我曾尝试使用JFrame,但我已经读到扩展JFrame通常是不必要的,也是一个坏主意(我没有添加任何额外的功能,所以这是有意义的)。我需要重写JPanel的
paintComponent()
方法,所以现在我倾向于扩展JPanel。有没有更好的方法来创建2D游戏界面,或者扩展JPanel并将其添加到JFrame是一种合适的方法?

没有更好的方法,这是一个非常好的选择。 如果要扩展JFrame(另一个选项),动画将在大多数windows系列操作系统上闪烁

JPanel是一个纯swing组件,在java中的反应比像JFrame这样的对等组件要好


您的选择很好,请继续,享受编程乐趣。

不,没有更好的方法,这是一个非常好的选择。 如果要扩展JFrame(另一个选项),动画将在大多数windows系列操作系统上闪烁

JPanel是一个纯swing组件,在java中的反应比像JFrame这样的对等组件要好


您的选择很好,请继续,尽情享受编程乐趣。

更新

自从我最初回答这个问题以来,我在这方面的知识有所增长,我同意@Snicolas的观点,即您应该使用JPanel

JPanel(因为它是一个swing组件)内置了对双缓冲的支持(AWT没有),并且具有更好的性能(我听说了,但我没有这方面的第一手经验)

您可能会发现本文很有用:

原始答案:

我建议您使用子类、组件或JComponent。我喜欢帆布。你应该看报纸


更新


使用Canvas,因为它接收所有用户输入事件,并且没有容器的包袱。例如,面板不会接收所有鼠标输入事件。

更新

自从我最初回答这个问题以来,我在这方面的知识有所增长,我同意@Snicolas的观点,即您应该使用JPanel

JPanel(因为它是一个swing组件)内置了对双缓冲的支持(AWT没有),并且具有更好的性能(我听说了,但我没有这方面的第一手经验)

您可能会发现本文很有用:

原始答案:

我建议您使用子类、组件或JComponent。我喜欢帆布。你应该看报纸


更新


使用Canvas,因为它接收所有用户输入事件,并且没有容器的包袱。例如,面板不会接收所有鼠标输入事件。

您是正确的——使用JPanel或JComponent并覆盖paintComponent。请看如何将背景绘制到BuffereImage中,调用super方法后,将立即在paintComponent方法中绘制该BuffereImage。精灵可能会直接在BuffereImage上方的paintComponent方法中绘制。还有1+到@Snicolas,因为他有很好的记录。你是对的——使用JPanel或JComponent并覆盖paintComponent。请看如何将背景绘制到BuffereImage中,调用super方法后,将立即在paintComponent方法中绘制该BuffereImage。精灵可能会直接在BuffereImage上方的paintComponent方法中绘制。还有1+给@Snicolas,感谢他的好记录。哦,如果是为了游戏,别忘了覆盖isFocusable方法,并使其返回真值,这样你就可以抓到按键了。谢谢你的帮助。这不仅可以更好地工作,而且还解决了我以前遇到的一个恼人的问题,我的JPanel会在标题栏下面画出来。回到Java-gaming.org,我们有一位成员坚持认为JComponent比JPanel更正确。如果我没记错的话,他的理由是JPanel(JComponent的一个子类)添加了未使用的功能,例如,添加更多Java组件的能力,而游戏通常不需要这些组件。我认为使用哪种方法(在JComponent和JPanel之间)并不重要。哦,如果是游戏,不要忘记覆盖isFocusable方法,并使其返回真值,这样你就可以抓住按键。谢谢你的帮助。这不仅可以更好地工作,而且还解决了我以前遇到的一个恼人的问题,我的JPanel会在标题栏下面画出来。回到Java-gaming.org,我们有一位成员坚持认为JComponent比JPanel更正确。如果我没记错的话,他的理由是JPanel(JComponent的一个子类)添加了未使用的功能,例如,添加更多Java组件的能力,而游戏通常不需要这些组件。我认为你使用哪一个并不重要(在JComponent和JPanel之间)。请给出你喜欢Canvas的原因。为什么要在JComponent或JPanel上使用它?为什么要求OP为双缓冲创建自己的后缓冲区,而不是让Swing组件自动为您创建后缓冲区?请给出您选择Canvas的原因。为什么要在JComponent或JPanel上使用它?为什么要求OP为双缓冲创建自己的后缓冲区,而不是让Swing组件自动为您创建后缓冲区?