Swing中 paint()与paintComponent()的区别

Posted ~的星辰大海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swing中 paint()与paintComponent()的区别相关的知识,希望对你有一定的参考价值。

从网上摘抄的。

1 - paint() 中调用 paintComponent(), paintBorder(), paintChildren()

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

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

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

以上是关于Swing中 paint()与paintComponent()的区别的主要内容,如果未能解决你的问题,请参考以下文章

VisualVM Sampler CPU swing paint() 怪异

发布覆盖java中组件的paint方法

关于Swing中JFrame或JPanel重写paint()方法后再在JFrame或JPanel中添加其他组件出现按钮等组件消失不见只有当鼠标扫过时才会出现的问题

Java Swing:在 JPanel 的组件下绘制?

java swing编程:如何刷新动态显示的内容并生成滚动条显示

如何在游戏循环中使用 repaint() 方法