今天做一个俄罗斯方块的程序,用到了repaint方法,并覆写了paintComponent(Graphics g)方法,就是想在调用repaint方法时,它会自动调用paintComponent(Graphics g)方法(重新绘图一般不是覆写repaint方法,而是覆写paint或paintComponent方法)……
可到实际运行的时候,调用repaint方法,它怎么就不调用paintComponent方法,郁闷至极!调试了很久,终于发现错误,因为在我写的JPanel语句中,我并没有给它一个容器,让其显示,那它怎么会调用paintComponent做显示呢?后来把它放到了JFrame中作显示,调用成功!以下是在优快云提问的情况的一个链接:
http://topic.youkuaiyun.com/u/20090528/10/b810134d-8671-413f-91fe-52a323015f79.html?seed=167026048
在调试这个问题的过程中,翻阅了repaint的源代码,虽然还不是很理解,可基本还是懂得了它的基本运行过程:
1、对轻量级组件
javax.swing.JComponent类
repaint()调用paint()
paint()调用paintComponent(),paintBorder(),及paintChildren()
2、对重量级组件
javax.swing.JComponent类
repaint()调用update()
update()调用paint()
paint()调用paintComponent(),paintBorder(),及paintChildren()
而我们一般在重绘组件时,是覆写paint方法或paintComponent方法。