在Java編寫具有連貫變化的視窗程式時,通常的辦法是在子類中覆寫父類的paint(Graphics)方法,在方法中使用GUI函數實作視窗重繪的過程。連貫變換的視窗會不斷地調用update(Graphics)函數,該函數自動的調用paint(Graphics)函數。這樣就會出現閃爍的情況。
為了解決這一問題,可以應用雙緩沖技術。可以通過截取上述過程,覆寫update(Graphics)函數,在記憶體中建立一個與視窗大小相同的圖形,并獲得該圖形的圖形上下文(Graphics),再将圖檔的圖形上下文作為參數調用paint(Graphics)函數(paint(Graphics)中的GUI函數會在圖檔上畫圖),再在update(Graphics)函數調用drawImage函數将建立的圖形直接畫在視窗上。
/**
* 覆寫update方法,截取預設的調用過程
*/
public void update(Graphics g) {
Image buffer = createImage(this.getWidth(), this.getHeight());// 建立圖形緩沖區
Graphics gOff = buffer.getGraphics();// 擷取圖形緩沖區的圖形上下文
paint(gOff);// 用paint方法中編寫的繪圖過程對圖形緩沖區繪圖
gOff.dispose();// 釋放圖形上下文資源
g.drawImage(buffer, 0, 0, this);// 将圖形緩沖區繪制到螢幕上
}