黑马程序员_对绘图方法paint的一些理解

时间:2023-02-19 13:51:42
------- android培训java培训、期待与您交流! ----------

 

 

paint方法是从Component中继承下来的,Component 类是与菜单不相关的 Abstract Window Toolkit 组件的抽象超类。还可以直接扩展类Component 来创建一个轻量级组件。继承了Component类的所有子类都可以覆盖paint方法,关于paint方法内容过多, 这里不便叙说,本文主要论继承了Component,Container后的一些子类的子类覆盖了paint方法的相同和不同之处。

本文主要论Java.awt.Panel和javax.swing.JPanel中覆盖了paint方法后的相同和不同之处。

1、相同点:

继承了Java.awt.Panel和javax.swing.JPanel并覆盖了从Component中继承得到的paint方法,都可以绘制图形,因为在父类中的无参构造函数中已经调用了paint方法,所以所有的子类中只要覆盖了paint方法,就不用再调用paint方法了,可以直接绘制图形了。

paint 方法的参数为Graphics 对象,该对象为绘图类,可以绘制很多类型的图形,如:绘制长方形,椭圆形,字符窜等,当Graphics 对象调用相应的函数时,只要覆盖了Java.awt.Panel和javax.swing.JPanel就可以绘制相应的图形了!

2.不同点:

虽然覆盖了paint方法都可以绘制图形,但这两者略有区别。

Java.awt.Panel和javax.swing.JPanel继承了Java.awt.Panel类并覆盖了paint方法的,在绘制得到的图形,界面上会一闪一闪的,换句话说,就是得到闪屏。而继承了javax.swing.JPanel类后重写paint方法的,绘制得到的图形,刷新频率比较高,图形也就比较平稳,看起来就是一个连续的过程。

后面通过不断的探究,原来是因为javax.swing.JComponent继承了Container容器,而继承了javax.swing.JComponent的所有类,都对java,awt.*的所有组件类进行了加强,也正因为如此,使用javax.swing包中的类得到的界面,会更加的贴近你想要的效果。有时候在使用java.awt中绘制界面时,调试了好几遍,都无法得到自己想要的效果,思来想去,都找不出答案,让程序员非常痛苦。所以本人建议,在绘制组件时,尽量的使用继承了Java.swing.JComponent的类,会使你减少不必要的麻烦。

通过使用paint方法,得到的一些感受,分享给大家,希望能对些朋友有帮助,如果有什么讲述的不够好的,盼请大家指教,谢谢。

 

------- android培训java培训、期待与您交流! ---------- 详情请查看: http://edu.csdn.net/heima