奇怪的paintComponent()
paintComponent定義在JComponent中,這個類是所有非窗口Swing組件的超類,只要窗口需要重新繪圖,事件處理器就會通告組件,從而引發執行所有組件的paintComponent方法。一定不要自己調用paintComponent方法。--摘自《Java核心技術》以下是部份源碼:




































當鼠標單擊panel的時候,就會調用add方法,Panel面板上立刻出現了一個小方塊。當鼠標在小方塊上雙擊的時候,就會調用remove方法,但是Panel面板上的小方塊并不能立刻消失,必須將整個面板最小化,或者改變面板大小的時候,面板上的小方塊才會消失。也就是說,remove方法中repaint()并沒有立刻生效。
然而把 super.paintComponent(g)前的//去掉之后不管是add或remove中調用repaint()都立刻生效。
JComponent中的paintComponent方法:













是什么原因導致執行了上面一段代碼之后,面板就可以立即更新了呢?難道跟dispose釋放資源有關?
# re: 奇怪的paintComponent() 2008-08-14 19:44 Matthew Chen 回復 更多評論
remove(Rectangle2D r)的參數是如何獲得的?是通過點擊生成的吧,這個能夠和List里面的匹配嗎?用==看起來怪怪的,是不是該用equals,代碼不夠全,看不透。