缓冲策略与JFrame中的DIY双缓冲

时间:2010-01-14 20:13:47

标签: java jframe doublebuffered

到目前为止,我已经通过创建和Image完成了双缓冲,使用相关的Graphics对象绘制我想要的图像,然后使用paint方法的Graphics对象将该Image绘制到屏幕上。最近,我了解了BufferStrategy类及其用法。我想知道这两种方法的优点和缺点是什么。

编辑: 我不认为我的问题非常明确。我想知道DIY方法和BufferStrategy的利弊,以及何时,如果有的话,我应该使用其中一种。

2 个答案:

答案 0 :(得分:7)

通过小心

,我使用默认的BufferStrategy总能取得好成绩
  • 始终在EDT
  • 上构建GUI组件
  • 永远不要从EDT
  • 以外的线程中绘制

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

答案 1 :(得分:1)

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

如果您使用JFrame,我认为您通常不需要自己动手双重缓冲。 Swing内置了双缓冲功能,默认情况下处于启用状态。自己手动完成此操作只会减慢速度。您可以通过在任何JComponents上调用isDoubleBufferingEnabled()来检查是否启用了双缓冲。

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