油漆()和油漆组件()之间的区别?
Posted
技术标签:
【中文标题】油漆()和油漆组件()之间的区别?【英文标题】:Difference between paint() and paintcomponent()? 【发布时间】:2013-02-12 18:08:48 【问题描述】:我已经尝试过这方面的教程,但我仍然不太明白。基本上我的问题是哪种方法更好,为什么?我应该使用paint
还是paintComponent
?
请尽量让答案简单,谢谢。
【问题讨论】:
另见Painting in AWT and Swing。 【参考方案1】:引用paint()
方法的文档
此方法实际上将绘画工作委托给三个受保护的方法:paintComponent、paintBorder 和paintChildren。 ... 只想专门化 UI(外观和感觉)委托的paint方法的子类应该重写paintComponent。
看起来paint()
方法实际上是在绘制组件,包括边框和子项。如果您只想自定义组件的外观,不包括边框和子项,请使用paintComponent()
。
http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#paint(java.awt.Graphics)
【讨论】:
虽然正确,但谨慎的做法是链接到更多更新版本的 JavaDocs,只是为了向开发人员强调 API 的潜在变化 我编辑了链接。感谢@MadProgrammer 提醒我这一点 无论如何,答案仍然是 +1 ;)【参考方案2】:一般来说,在 Swing 中绘画时,建议覆盖paintComponent
。
有很多原因,其中一个是 paintComponent
被绘制在底层,这意味着您不会意外擦除在绘制过程中渲染的任何组件 - 这种情况经常发生在在这里发帖的人身上.
您可能需要覆盖 paint
的次数非常少,但我始终鼓励您先尝试使其与 paintComponent
一起使用。
退房
Performing custom painting Painting in AWT and Swing(+1 垃圾神)【讨论】:
我认为从双缓冲的角度覆盖paint() 或paintComponent() 并不重要。请参阅“在 AWT 和 Swing 中绘制”一文中的双缓冲部分。现在,如果您碰巧在帧级别覆盖了 paint()(我从不推荐)并且忘记调用 super.paint(),那么您可能会遇到一些麻烦。 @camickr 是的,你是对的,这就是不覆盖***容器的论据:P以上是关于油漆()和油漆组件()之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章