3 回答

TA貢獻1851條經驗 獲得超5個贊
對你的問題的(非常)簡短回答paintComponent
是“當它需要時”。有時將Java Swing GUI系統視為“黑盒子”更容易,其中許多內部構件在沒有太多可見性的情況下處理。
有許多因素決定了何時需要重新繪制一個組件,包括移動,重新調整大小,改變焦點,被其他框架隱藏,等等。其中許多事件都是自動神奇地檢測到的,并且paintComponent
在確定需要進行該操作時在內部調用。
我和Swing一起工作了很多年,我認為我沒有paintComponent
直接打過電話,甚至沒有直接打過電話。我最接近的是使用repaint()
方法以編程方式觸發某些組件的重繪(我假設調用paintComponent
下游的正確方法)。
根據我的經驗,paintComponent
很少直接覆蓋。我承認有些自定義渲染任務需要這樣的粒度,但Java Swing確實提供了一套(相當)強大的JComponents和Layouts,可用于完成大部分繁重工作而無需直接覆蓋paintComponent
。我想我的觀點是確保在您嘗試滾動自己的自定義渲染組件之前,您無法對本機JComponents和Layouts執行某些操作。

TA貢獻1891條經驗 獲得超3個贊
調用object.paintComponent(g)
是一個錯誤。
而是在創建面板時自動調用此方法。該paintComponent()
方法也可以通過類中repaint()
定義的方法顯式調用Component
。
調用的效果repaint()
是Swing自動清除面板上的圖形并執行該paintComponent
方法以重繪該面板上的圖形。
添加回答
舉報