paint(),paintComponent()区别_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > paint(),paintComponent()区别

paint(),paintComponent()区别

 2016/6/17 5:33:37  cscoder  程序员俱乐部  我要评论(0)
  • 摘要:http://bbs.csdn.net/topics/390585720写道1-paint()中调用paintComponent(),paintBorder(),paintChildren()2-最重要的区别是“双缓冲”。Swing组件的paint()中实现了双缓冲,所以不要随便去覆写,会破坏双缓冲的,————建议的方式是覆写paintComponent(),很多人做的小程序会”闪烁“,就是因为他们覆写了paint()方法,破坏了Swing本身的双缓冲。Swing不建议用户自己实现双缓冲。3
  • 标签:区别
http://bbs.csdn.net/topics/390585720 写道 1 - paint() 中调用 paintComponent(), paintBorder(), paintChildren()

2 - 最重要的区别是“双缓冲”。Swing 组件的 paint() 中实现了双缓冲,所以不要随便去覆写,会破坏双缓冲的,————建议的方式是覆写 paintComponent(),很多人做的小程序会”闪烁“,就是因为他们覆写了 paint() 方法,破坏了Swing本身的双缓冲。Swing 不建议用户自己实现双缓冲。

3 - 覆写 paint(),如果新方法没有去调用 paintChildren(),还会造成子控件不显示,鼠标移上去才显示,这个也是很多新手问的问题: “为什么我的按钮只有鼠标移上去才显示?”

4 - 只有极少数的情况可能需要覆写 paint() 方法,通常是为了实现特殊的绘图效果,或者特殊的优化,比如 JViewport 覆写了 paint() 方法,使用“延迟重绘”的方式来合并当滚动条移动时一些特别频繁的重绘请求,等等。



这两个方法,
paint()是基础,paint中会调用 paintComponent(), paintBorder(), paintChildren()
这三个方法,
这三个方法一个是绘制背景,一个绘制边框,一个绘制子控件。
一般重写背景,是建议重写paintComponent()的。

?

http://javapub.iteye.com/blog/763849 写道 paint :绘制容器。
paintComponents : 绘制此容器中的每个组件。

由此不难看出,二者就是房子与家具的关系。

但是该类中并不包含paintBorder方法,由此我想,该方法应该是位于扩展包中,很幸运,在javax.Swing包中的JComponent类中,找到了paint,paintComponent和paintBorder三个方法,我想这应该就是小朱宇要问的,查看API,有如下解释:

paint :由 Swing 调用,以绘制组件。此方法实际上将绘制工作委托给三个受保护的方法:paintComponent、paintBorder 和 paintChildren。按列出的顺序调用这些方法,以确保子组件出现在组件本身的顶部。子类可以始终重写此方法。只想特殊化 UI(外观)委托的 paint 方法的子类只需重写 paintComponent。

paintComponent :如果 UI 委托为非 null,则调用该 UI 委托的 paint 方法。向该委托传递 Graphics 对象的副本,以保护其余的 paint 代码免遭不可取消的更改

?

发表评论
用户名: 匿名