[問題] Applet的paint函式重繪問題。

看板java作者 (nahgnimiast)時間15年前 (2010/09/10 18:15), 編輯推噓1(105)
留言6則, 4人參與, 最新討論串1/1
我開啟Applet的視窗後,將Applet視窗移出螢幕範圍外, 再拉回來,整個Applet畫面被清空,畫的圖形都不見了。 看debug的輸出,會看到System.out.println這行只輸 出一次paint而己。 如果把super.paint(g)這行拿掉,可以看到paint很多次, 但是圖形有很多殘影且背景沒有重繪。 我想知道應該怎麼做才會正確的重繪,我想這個問題應 該很簡單,但是書上沒寫到,麻煩請各位高手指點一下。 程式碼如下 public void paint(Graphics g) { super.paint(g); System.out.println("paint\n"); for(int i=0; i<10; ++i) { g.drawLine(0, 0, 25, 10*i); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.131.205

09/10 18:20, , 1F
找看看畫面更新的指令 (applet不熟)
09/10 18:20, 1F
更新有repaint可以用,但是我覺得很奇怪的地方是 繪圖的時候,應該會呼叫到paint這個函式,所以拉出畫面外,再拉回來時 ,應該會再呼叫到paint,但是不知道為什麼,好像只有super.paint(g)有 作用,它後面的部分都沒作用?這是我的想法,不知道正不正確。

09/10 18:50, , 2F
版本多少? 有沒有使用到 AWT component?
09/10 18:50, 2F
有用AWT,但應該沒用到component吧? 共improt下面兩個package import javax.swing.JApplet; import java.awt.Graphics; 我灌得Java版本 jdk-6u21-windows-i586 用的IDE環境 eclipse-jee-helios-win32.zip ※ 編輯: tsaiminghan 來自: 59.121.131.205 (09/10 19:04) ※ 編輯: tsaiminghan 來自: 59.121.131.205 (09/10 19:05)

09/10 19:25, , 3F
把視窗拉出螢幕外再回來不repaint是正常的,但也不會被清空才
09/10 19:25, 3F

09/10 19:26, , 4F
是。我拿你的 code 試了一下,沒有同樣的問題。
09/10 19:26, 4F
所以這和windows API的運作方法不一樣?如果有發生被覆住的區塊,在恢復時, windows API會自動呼叫paint函式來重繪 我剛才重試了一下,情況如你所說,沒有整個重繪,不過拉來拉去時, 有時好像會發生,不知道是不是我電腦有問題。 ※ 編輯: tsaiminghan 來自: 59.121.131.205 (09/10 20:26)

09/15 00:12, , 5F
之前寫期末專題時也遇到原波的問題,我也沒解決
09/15 00:12, 5F

09/15 08:51, , 6F
理論上應該是會有作用,我猜你當時的 paint 跟你想的不一樣
09/15 08:51, 6F
文章代碼(AID): #1CYWLOuI (java)