三種重繪總結:
q:為什麼要重繪?
a:因為在畫板上作畫的時候圖形是儲存在快取裡面而不是儲存在記憶體裡面的。因此當我們把畫板最小化的時候,快取中儲存的圖形內容就會被釋放清空,但是
記憶體裡面並沒有儲存資料,所以再恢復窗體的時候只有窗體上的元件會被重繪,圖形的內容已經消失。
how to dispose it??
上面說了窗體或者面板會在恢復時自動重繪窗體或者面板上已經新增的元件,這是jpanel裡面有乙個public void paint(graphic g){}
方法,所以我們在畫圖的時候把圖形內容(或者資料)儲存以後,在jpanel呼叫paint方法是順便把圖形重繪出來,這就達到我們的目的。
no、1 直接儲存
我們在繪圖的時,每畫乙個圖,就建立乙個圖形物件,把繪圖時的資料(座標、顏色、繪圖動作命令等)儲存起來,存入乙個佇列中,在重繪遍歷這個佇列
,把儲存的圖形內容輸出,在繪製一遍。
缺點:儲存的內容繁多,比如儲存多邊形的時候那個糾結。還有在重繪的是哦戶還要把儲存的瘦取出來再繪製一遍,那麼原來繪製的方法得再寫一遍,繁雜!
//************************略************//
no、2 儲存影象畫素
我們重繪的目的,只要求重繪的畫圖面板上的內容,那麼我們只需把畫圖面板上的影象(由很多畫素點組成)內容用陣列儲存起來,重繪時,在paint()中
又把陣列中的內容遍歷出來,這樣就行了。
優點:儲存的內容單一,只是畫素點對應的顏色而已,到時候把畫素顏色遍歷一遍放在面板上就ok了~~~
//**************重繪操作****************//
//需要重寫繼承了jpanel類的mypanel類的paint()方法,在mypanel面板物件呼叫paint()方法時完成重繪操作
//寫乙個類繼承jpanel,重寫jpanel的paint方法
class mypanel extends jpanel}}
}}}//******************截圖儲存操作******************//
object object = e.getsource();
jpanel drawpanel = (jpanel)(object);
//獲取到drawpanel的左上角相對於螢幕的座標點
point point = drawpanel.getlocationonscreen();
//獲取到drawpanel的面積大小
dimension dimension = drawpanel.getpreferredsize();
//建立乙個要擷取的區域,相當於是乙個螢幕裁剪模具
rectangle rect = new rectangle(point,dimension);
//畫完乙個圖形之後就把影象擷取下來
bufferedimage cut_image = robot.createscreencapture(rect);
data = new int[cut_image.getheight()][cut_image.getwidth()];
for (int i=0;ifor (int j=0;jno、3 儲存影象
方法2的改進:為何在去影象是不直接把影象儲存起來,重繪時直接把影象「貼」在面板上上呢?
java 給小畫板加上重繪
在視窗最小化 改變視窗的位置 大小等操作時 我們會發現原先已經畫好的圖不見了 這到底是為什麼呢?簡單點說是因為在對視窗進行這些操作時,視窗重新繪製了一遍,而由於我們沒有重寫jframe裡的paint 方法,所以呼叫的是父類的方法。public void paint graphics g 這裡的lis...
選單有重繪
type tadvanceddrawitemeven procedure sender tobject acanvas tcanvas arect trect state townerdrawstate of object 說明 sender標識乙個選單項的例項 acanvas 提供乙個選單項的例項...
uc gui重繪機制
乙個控制項根據它的特性繪製自己。這一工作通過呼叫wm的 api函式 wm exec 來完成。如果在程式中沒有呼叫 wm exec 就必須呼叫 wm paint 函式來繪製控制項。在多工環境的 uc gui 乙個後台任務通常用於呼叫 wm exec 並更新控制項 及其它所有帶有 函式的視窗 這樣就不必...