2010-01-14 70 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()來檢查是否啓用了雙緩衝。

有些情況下你可能想自己做這件事,但這應該是例外而不是規則。也許你正在做一些事情,比如寫一個遊戲,在這種情況下,也許我的建議不適用。無論如何,希望以上是有用的信息。