Java paint()和paintcomponent()之间的区别?

Java paint()和paintcomponent()之间的区别?,java,swing,paint,paintcomponent,Java,Swing,Paint,Paintcomponent,我试过这方面的教程,但我还是不太明白。基本上我的问题是哪种方法更好,为什么?我应该使用paint还是paintComponent 请尽量保持答案简单,谢谢。引用paint()方法的文档 此方法实际上将绘制工作委托给三种受保护的方法:paintComponent、paintBorder和paintChildren。 ... 只想专门化UI(外观)委托的绘制方法的子类应该重写paintComponent 看起来paint()方法实际上绘制了组件,包括边框和子对象。如果只想自定义组件的外观(不包括边框

我试过这方面的教程,但我还是不太明白。基本上我的问题是哪种方法更好,为什么?我应该使用
paint
还是
paintComponent


请尽量保持答案简单,谢谢。

引用
paint()
方法的文档

此方法实际上将绘制工作委托给三种受保护的方法:paintComponent、paintBorder和paintChildren。 ... 只想专门化UI(外观)委托的绘制方法的子类应该重写paintComponent

看起来
paint()
方法实际上绘制了组件,包括边框和子对象。如果只想自定义组件的外观(不包括边框和子项),请使用
paintComponent()


一般来说,在摇摆状态下喷漆时,建议覆盖
paintComponent

原因有很多,一个是
paintComponent
在底层绘制,这意味着您不会意外地擦除在绘制过程中渲染的任何组件-这经常发生在这里发布文章的人身上

有时,您可能需要重写
paint
,但我始终鼓励您首先尝试使用
paintComponent

退房

  • (+1对垃圾神)

另请参见。虽然正确,但谨慎的做法是链接到更易于更新的JavaDocs版本,只是为了向开发人员强调对APII编辑的链接的潜在更改。感谢@MadProgrammer提醒我这一点,不管怎样,答案仍然是+1;)我认为从双缓冲的角度重写paint()或paintComponent()并不重要。请参阅“在AWT和Swing中绘制”一文中的双缓冲部分。现在,如果您碰巧在帧级别重写了paint()(我从不建议这样做),而忘记了调用super.paint(),那么您可能会遇到一些麻烦。@camickr啊,是的,您是对的,这就是不重写顶级容器的理由:P