油漆,油漆组件和油漆挥杆中的组件之间的区别

2022-09-01 07:26:53

和 Java Swing 中的实际区别是什么?paint()paintComponent()paintComponents()

我试图理解Oracle文档中解释的内容,但我不清楚。


答案 1
  • AWT,覆盖 。paint()
  • 摆动顶级容器(例如,是 、 、 、 ..),覆盖 。但是有很多很好的理由不在TLC中绘画。也许是一个单独的问题的主题。JFrameJWindowJDialogJAppletpaint()
  • Swing 的其余部分(从 派生的任何组件),将覆盖 。JComponentpaintComponent()
  • 既不覆盖也不显式调用 ,而是将其留给 API 在需要时调用它。paintComponents()

确保在重写方法时也使用@Override表示法。

这样做会暗示尝试在 a 中重写的问题(它没有这样的方法),这是很常见的。paintComponent(..)JFrame


答案 2

您可能有兴趣阅读AWT和秋千中的绘画

引用:

适用于AWT轻量级组件的规则也适用于Swing组件 - 例如,paint()在渲染时被调用 - 除了Swing进一步将paint()调用分解为三个单独的方法,这些方法按以下顺序调用:

 protected void paintComponent(Graphics g)
protected void paintBorder(Graphics g)
protected void paintChildren(Graphics g)

Swing 程序应覆盖 paintComponent() 而不是覆盖 paint()。虽然API允许这样做,但通常没有理由覆盖paintBorder()或paintComponents()(如果你这样做,请确保你知道自己在做什么!这种分解使程序更容易仅覆盖需要扩展的绘画部分。例如,这解决了前面提到的AWT问题,其中未能调用super.paint()阻止了任何轻量级子级的出现。


推荐