2010-01-14 53 views
0

到目前为止,我已经通过创建和映像,使用其关联的图形对象绘制我想要的图像,然后使用绘制方法的图形对象将该图像绘制到屏幕来完成双缓冲。最近,我了解了BufferStrategy类及其用法。我想知道这两种方法的优缺点。编号: 我不认为我的问题非常明确。我想知道DIY方法和BufferStrategy的优缺点,以及什么时候应该使用这两种方法。BufferStrategy vs JFrame中的双重缓冲

回答

7

我一直使用良好的效果默认BufferStrategy被小心翼翼地

  • 始终建立在EDT
  • GUI组件切勿从线拉出除了EDT

这优秀的example必须双缓冲区,因为它不断在初始线程上绘制而不是EDT。相比之下,这个相当繁忙的example只依赖于为响应Swing Timer而调用的repaint()。除了composite之外,我很少需要屏幕外缓冲区。最后,这个tutorial article提供了更多的指导方针。

+1

EDT代表什么? – resotpvl 2010-01-15 00:44:02

+1

它代表事件调度线程,也称为Swing线程或有时是AWT线程。正如@trashgod指出的那样,在此线程上创建和修改GUI组件非常重要,因为Swing不是线程安全的。 http://java.sun.com/docs/books/tutorial/uiswing/concurrency/dispatch.html – 2010-01-15 01:51:12

+0

好口语;我已经编辑了相应的链接。 – trashgod 2010-01-15 05:04:56

1

如果您还没有,我建议您阅读Painting in AWT and Swing

如果您使用JFrame,我认为您通常不需要自己动手做双缓冲。 Swing内置了默认打开的双缓冲。手动自己做这件事只会减慢速度。您可以通过在任何JComponents上调用isDoubleBufferingEnabled()来检查是否启用了双缓冲。

有些情况下你可能想自己做这件事,但这应该是例外而不是规则。也许你正在做一些事情,比如写一个游戏,在这种情况下,也许我的建议不适用。无论如何,希望以上是有用的信息。