Swing中paint,paintComponent和paintComponents之间的区别

Abh*_*ary 27 java swing paintcomponent

是什么之间的实际差异paint(),paintComponent()以及paintComponents()在的Java Swing?

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

And*_*son 36

  • AWT,覆盖paint().
  • 摇摆顶层容器(EGS是JApplet,JFrame,JWindow,JDialog.),覆盖paint().但是有一些很好的理由不在 TLC中绘画.也许是一个单独问题的主题.
  • Swing的其余部分,覆盖paintComponent().
  • 既不覆盖也不显式调用paintComponents(),将其留给API以在需要时调用它.

@Override重写方法时,请务必使用表示法.

这样做会暗示试图覆盖问题paintComponent(..)JFrame(它有没有这样的方法),这是很常见的.

  • @GMsoF `repaint()` 将在需要时自动调用。如果是动画,也可能被显式调用。尽管调用次数过多、速度过快,但有些调用会被合并(被忽略)。 (2认同)

Avr*_*rom 17

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

报价:

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

 protected void paintComponent(Graphics g)
protected void paintBorder(Graphics g)
protected void paintChildren(Graphics g)
Run Code Online (Sandbox Code Playgroud)

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