解決awt元件導致的視窗閃爍問題
阿新 • • 發佈:2021-10-17
相信很多人在使用awt元件時都會遇到視窗閃爍的問題,但是使用swing元件並不會出現這種問題。那麼我自己呢在使用awt元件時也遇到過這樣的問題。
首先,先說一下為什麼會出現視窗閃爍的問題,AWT是抽象視窗工具箱的縮寫,它為編寫圖形使用者介面提供了使用者介面,通過這個介面就可以繼承很多方法,省去了很多工作。AWT還能使應用程式更好地同用戶進行互動。AWT中的容器是一種特殊的元件,他可以包含其他元件,即可以把元件方法容器中。Container類是用來存放其他元件的Component類的子類,Frame類又是Component的子類。Frame類用於建立具有標題欄和邊界的視窗。這裡通過繼承Frame類來建立自己的介面。
在awt中對於窗體畫布的重繪其條用順序是repaint() —>update()—>paint();預設的upadate()中自帶clearRect()方法,即清屏功能,程式執行時我們呼叫repaint()方法重新整理則會造成螢幕剛清空,又繼續重新呼叫paint()方法往窗體上繪製,則就造成閃爍問題!
所以我們只需要在清屏的時候使用我們的雙緩衝技術在原本閃爍的地方加上一張圖片,也就是建立一個緩衝區,在沒有圖片載入時,會從緩衝區載入圖片,就可以解決閃爍問題。
解決方法時直接在paint()方法裡面進行雙緩衝操作,程式碼如下:
//雙緩衝解決閃動問題 //如果是swing就會避免視窗的閃爍問題。private Image offScreenImage = null; public void update(Graphics g) { if(offScreenImage == null) { //這是遊戲視窗的寬度和高度 offScreenImage = this.createImage(1067, 600); } Graphics gOff= offScreenImage.getGraphics(); paint(gOff); g.drawImage(offScreenImage, 0, 0, null); }