我有一個例程,在滾動窗格中繪製一個瘋狂的大圖。在添加到scrollpane之前,繪畫太大了 - menory的要求將是幾個演出。爲什麼我的jscrollpane導致java swing中奇怪的paint調用?
由於圖的大小,我在滾動窗格的子項的paint方法內渲染圖表。哪一個效果不錯,但是我注意到每次移動滾動條時,我的繪畫例程都會被調用兩次 - 一次是剪裁矩形,等於滾動到的未覆蓋區域,第二次是剪裁矩形,等於視口的尺寸。
例如,如果我的視口245x195 &我由3個像素向下滾動我的油漆例行獲取與g.getClipBounds()
一套名爲如下:
java.awt.Rectangle[x=0,y=195,width=245,height=3]
java.awt.Rectangle[x=0,y=3,width=245,height=195]
...因爲我的油漆程序中渲染這是造成閃爍(我儘可能快地做我的計算,但是我猜想有一點延遲)。問題:
有誰知道如何防止第二油漆通話?這是純粹的JScrollPane我在這裏做的東西 - 我有一個組件,我將它添加到scrollpane,我將scrollpane添加到父組件。即使在第一個圖像滾動演示@the swing tutorial中,您也可以看到此行爲。
如果#1的答案是'nope':任何人都可以想出一個處理這個問題的好方法嗎?我是否應該繪製某種圖像緩衝區,跟蹤最近的繪圖調用&如果可能,複製圖像?我無法想象這比重新渲染快得多,但任何洞察讚賞:-)
我唯一的問題是我無法緩衝整個圖像 - 它太大了。 這意味着我需要在繪製時保留緩衝區域,當我被調用以根據需要繪製()並將它們縫合在一起時檢查覆蓋範圍。 我想我會給它一個鏡頭,但我會延期看看是否有其他人有任何想法 – 2009-02-19 21:20:13