Java paint()方法個(gè)人理解

這些天給同學(xué)講了不少次JUI的 paint()方法和畫筆,就目前而言已經(jīng)比當(dāng)初自己寫的時(shí)候理解的多了不少了,雖然有點(diǎn)花時(shí)間,但好處還是有的。(習(xí)慣把Graphics g對(duì)象叫做畫筆)
以前想要在某個(gè)容器上用畫筆繪制東西來(lái)做游戲,直接給主類繼承JPanel,然后只是把paint()+repaint()當(dāng)作線程來(lái)使,感覺(jué)就這么背下來(lái)了。然后當(dāng)我再看這個(gè)paint方法的時(shí)候,隱約記得有個(gè)方法叫做獲取對(duì)象的畫筆,又看到里面?zhèn)魅肓艘桓嫻P參數(shù),有點(diǎn)不對(duì)勁。當(dāng)我嘗試在別人寫的一個(gè)繼承JFrame類中的paint方法內(nèi),調(diào)用JPanel的畫筆的時(shí)候,先用getGraphics獲取到JPanel的畫筆,然后我唯一能想到需要傳遞畫筆的地方就是在paint方法里需要super調(diào)用一下父類的paint方法,大概就是這里把畫筆傳遞過(guò)去然后畫在JPanel上的吧?唔。。結(jié)果什么都沒(méi)出來(lái),看起來(lái)不是從這里傳遞的。目前為止還有一個(gè)疑點(diǎn),就是我總是在用的這個(gè)paint方法究竟是誰(shuí)調(diào)用的,在哪調(diào)用的。既然能夠super到父類,肯定是父類中有這個(gè)方法。那意思就是我繼承什么容器,調(diào)用的就是誰(shuí)的paint方法了唄,是誰(shuí)的paint方法那不就是在誰(shuí)身上畫了唄。那在當(dāng)前對(duì)象身上畫東西,在哪調(diào)用的呢?在哪傳遞的畫筆呢?我賭了一把,在JFrame構(gòu)造方法里顯式調(diào)用了一下this.paint(),然后把我獲取到的JPanel畫筆傳了進(jìn)去,果然畫出來(lái)東西了。這樣來(lái)的話,意思就是在我之前寫的方法中,有某個(gè)方法偷偷調(diào)用了this.paint(g),并且把當(dāng)前對(duì)象的畫筆傳了進(jìn)去吧,唯一能讓我想到讓東西顯示出來(lái)的方法就是setVisible了,翻了幾層父類關(guān)系,好像是在Component類中看到了repaint()方法,借此,我目前的理解就到這里了吧。
除此之外,就我們平時(shí)使用的JContainer下的JFrame或者是JPanel而言,add方法可以為其加上自己的組件,之前我并沒(méi)有在意過(guò),組件究竟是怎么被加上去的。直到前兩天有人問(wèn)我,組件是加在JFrame之上的,而畫筆也是把內(nèi)容畫在JFrame上。這之間的圖層關(guān)系總是搞不懂,為什么畫出來(lái)的東西會(huì)蓋住之前加的組件呢?唯一的解釋就是,組件看起來(lái)是被加上去的,實(shí)際上則是被JContainer里的paint()方法畫在容器上的。所以一開始先加的組件,在paint()方法自動(dòng)執(zhí)行的時(shí)候,調(diào)用了super.paint(g)會(huì)被先畫出來(lái),然后再繼續(xù)畫自己想要的東西,就會(huì)蓋住之前的組件了。這樣的解釋也正好能夠迎合為什么組件內(nèi)都會(huì)有個(gè)paintComponent方法,這個(gè)方法估計(jì)就是容器調(diào)用組件用來(lái)繪制自己的方法吧。而組件之間的繪制方法也有差距,類如JLabel本身無(wú)法獲取焦點(diǎn),如果paint()里不調(diào)用super.paint()似乎會(huì)出現(xiàn)無(wú)法正常顯示的狀況,有的人說(shuō)我說(shuō)的這種情況不對(duì),不過(guò)我昨天所見(jiàn)識(shí)到的確實(shí)是這個(gè)樣子。但是和JLabel相對(duì)的類似JButton的功能性的,總是能夠在顯示出來(lái)的時(shí)候獲取到焦點(diǎn),抑或者是鼠標(biāo)從上面經(jīng)過(guò),會(huì)觸發(fā)一些顯示效果,都能觸發(fā)他們的繪制方法,然后正常顯示出來(lái)。但是繼承了父類的paint之后,就都能正常顯示了。
懶得翻源碼,瞎猜真有意思,就怕誤人子弟啊,大家隨便看看就行。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • OC語(yǔ)言基礎(chǔ) 1.類與對(duì)象 類方法 OC的類方法只有2種:靜態(tài)方法和實(shí)例方法兩種 在OC中,只要方法聲明在@int...
    奇異果好補(bǔ)閱讀 4,522評(píng)論 0 11
  • 初稿: 各位青椒大家好,畢業(yè)典禮要來(lái)到,我們四個(gè)來(lái)開場(chǎng)——大家好! 今天說(shuō)段三句半,說(shuō)的不好多包涵,不管表演好不好...
    靈寶0769劉晶晶閱讀 1,335評(píng)論 9 9
  • 感恩梅梅及時(shí)把總結(jié)表格發(fā)我做參考。 感恩毛毛推薦給我的計(jì)數(shù)器淘寶店鋪。感恩店主多多送我一個(gè)計(jì)數(shù)器。使用感覺(jué)不錯(cuò)。 ...
    宇宙女神o胡琳o靈兒閱讀 271評(píng)論 0 2

友情鏈接更多精彩內(nèi)容