2013-04-28 45 views
0

BufferStrategy是AWT的一部分,經常與Canvas類一起使用,但是它也可以與Swing UI結合而不會導致任何窗口顯示問題,或者我應該在這種情況下更好地使用純AWT嗎?謝謝你的回答。BufferStrategy和Swing合併?

+1

這個問題背後的動機是什麼? – 2013-04-28 15:17:25

+1

默認情況下Swing是雙緩衝的,所以通常沒有理由使用BufferStrategy。 – camickr 2013-04-28 17:13:54

+0

我讀過BufferStrategy要快得多。 – user1812379 2013-04-29 09:01:56

回答

1

在我用它這樣的揮杆圖像預覽:

public class ImagePreview extends JFrame { 
    ... 
    private final int BUFFERS = 2; 
    private BufferStrategy bufferStrategy; 
    ... 
    @Override 
    public void paint(Graphics g) { 
     if (bufferStrategy == null) { 
      this.createBufferStrategy(BUFFERS); 
      this.bufferStrategy = this.getBufferStrategy(); 
     } 
     ... 
     for (int i = 0; i < BUFFERS; i++) { 
      Graphics2D g2Buffered = (Graphics2D) bufferStrategy.getDrawGraphics(); 
      g2Buffered.draw(... 
      ... 
      bufferStrategy.show(); 
      g2Buffered.dispose(); 
     } 
    } 
} 

我希望幫助。

+0

但是如果我不想創建一個全屏應用程序並使用帶有JMenu的JFrame?在這種情況下,我應該更好地使用AWT嗎? – user1812379 2013-04-29 09:05:15

+0

正如你可以看到它是一個帶有緩衝塗料方法的JFrame。 – Stefan 2013-04-29 13:46:04

+0

據我所知只有java.awt.Canvas使用硬件加速,但這個類是AWT的一個子集。 – user1812379 2013-04-30 08:57:28

2

BufferStrategy實際上並不是AWT的一部分,即使它位於java.awt.image包中。出於歷史原因,所有與圖像相關的類都在java.awt.image包中。 BufferStrategy出現在Java 1.4中,到那時Swing是推薦的框架(與AWT相反)。

因此,您可以在Swing中使用BufferStrategy。它不需要普通的Swing組件,但它對遊戲很有用。

+0

謝謝。這意味着BufferStrategy與重量級組件無關? BufferStrategy比內部Swing雙緩衝區更強大嗎? – user1812379 2013-06-20 10:59:57

+0

它與重量級組件無關。 「強大」 - 取決於你的用例。 – lbalazscs 2013-06-20 17:23:58