亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

paintComponent是如何工作的?

paintComponent是如何工作的?

白豬掌柜的 2019-08-08 17:02:11
paintComponent是如何工作的?這可能是一個非常無聊的問題。我剛剛開始學習Java我不明白paintComponent方法的操作。我知道如果我想畫一些東西,我必須覆蓋paintComponent方法。public void paintComponent(Graphics g){    ...}但它何時被稱為?我從來沒有看到像“object.paintComponent(g)”這樣的東西,但它仍然是在程序運行時繪制的。什么是Graphics參數?這個從哪里來?調用方法時必須提供參數。但正如我之前所說,似乎永遠不會明確地調用此方法。那么誰提供這個參數呢?為什么我們必須將其轉換為Graphics2D?public void paintComponent(Graphics g){     ...     Graphics2D g2= (Graphics2D) g;     ...}
查看完整描述

3 回答

?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

對你的問題的(非常)簡短回答paintComponent是“當它需要時”。有時將Java Swing GUI系統視為“黑盒子”更容易,其中許多內部構件在沒有太多可見性的情況下處理。

有許多因素決定了何時需要重新繪制一個組件,包括移動,重新調整大小,改變焦點,被其他框架隱藏,等等。其中許多事件都是自動神奇地檢測到的,并且paintComponent在確定需要進行該操作時在內部調用。

我和Swing一起工作了很多年,我認為我沒有paintComponent直接打過電話,甚至沒有直接打過電話。我最接近的是使用repaint()方法以編程方式觸發某些組件的重繪(我假設調用paintComponent下游的正確方法)。

根據我的經驗,paintComponent很少直接覆蓋。我承認有些自定義渲染任務需要這樣的粒度,但Java Swing確實提供了一套(相當)強大的JComponents和Layouts,可用于完成大部分繁重工作而無需直接覆蓋paintComponent。我想我的觀點是確保在您嘗試滾動自己的自定義渲染組件之前,您無法對本機JComponents和Layouts執行某些操作。


查看完整回答
反對 回復 2019-08-08
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

調用object.paintComponent(g)是一個錯誤。

而是在創建面板時自動調用此方法。該paintComponent()方法也可以通過類中repaint()定義的方法顯式調用Component。

調用的效果repaint()是Swing自動清除面板上的圖形并執行該paintComponent方法以重繪該面板上的圖形。


查看完整回答
反對 回復 2019-08-08
  • 3 回答
  • 0 關注
  • 2211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號