我正在嘗試使用AWT在方法paint()
中雙緩衝包含多邊形的圖像。使用Image
對象進行緩衝處理,我將圖像背景設置爲黑色,將多邊形繪製到圖像上,然後將緩衝圖像繪製到屏幕上。然後我打電話給repaint()
以便再次渲染圖像。連續雙緩衝解決方案不起作用
不幸的是,我仍然在重新繪製圖像時接收到僞像。我做錯了什麼?
編輯:作爲一個方面說明,我使用Java 8 編輯2:我在paint()
打電話repaint()
,因爲我需要不斷緩衝區中的圖像。該多邊形是爲了在用戶輸入的基礎上翻譯屏幕。
import java.applet.Applet;
import java.awt.*;
public class DoubleBuffer extends Applet {
int xSize = 900;
int ySize = 600;
Image bufferImage;
Graphics bufferG;
@Override
public void init() {
this.setSize(xSize, ySize);
//Double buffering related variables
bufferImage = this.createImage(xSize, xSize);
bufferG = bufferImage.getGraphics();
}
//BUFFERING DONE HERE
@Override
public void paint(Graphics g){
//drawing images to external image first (buffering)
bufferG.setColor(Color.BLACK);
bufferG.fillRect(0,0,xSize,ySize);
bufferG.setColor(Color.WHITE);
bufferG.drawRect(100, 100, 100, 100);
//draw the image and call repaint
g.drawImage(bufferImage, 0, 0, this);
repaint();
}
}
任何理由*不*使用輕量級組件(比如JPanel中),這是默認雙緩衝? (我會推薦* not *在'paint'方法中調用'repaint') – copeg
聽起來很奇怪,因爲某些API約束我使用重量級組件(即只是窗口)工作(請與我聯繫)。如果一切都失敗了,我會繼續並使用一個輕量級組件。我即將展開更多研究,但在paint()中使用repaint()會出現什麼問題?我應該在哪裏重新呈現我的形象? –
P.S.這是一個教育相關的工作,其中圖像渲染形成了一小部分 - 我幾乎沒有在這方面的經驗。 –