Java Swing中油漆、油漆组件和油漆组件之间的差异

Java Swing中油漆、油漆组件和油漆组件之间的差异,java,swing,paintcomponent,Java,Swing,Paintcomponent,Java Swing中的paint()、paintComponent()和paintComponents()之间的实际区别是什么 我试图理解Oracle文档中解释的内容,但我不清楚。 AWT,覆盖paint() 摆动顶层容器(例如,JFrame,JWindow,JDialog,JApplet),覆盖paint()。但是有很多很好的理由不在TLC中画画。也许是另一个问题的主题 Swing的其余部分(从JComponent派生的任何组件)重写paintComponent() 既不重写也不显式调用pa

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

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

  • AWT,覆盖
    paint()
  • 摆动顶层容器(例如,
    JFrame
    JWindow
    JDialog
    JApplet
    ),覆盖
    paint()。但是有很多很好的理由不在TLC中画画。也许是另一个问题的主题
  • Swing的其余部分(从
    JComponent
    派生的任何组件)重写
    paintComponent()
  • 既不重写也不显式调用
    paintComponents()
    ,而是让API在需要时调用它
在重写方法时,一定要使用
@Override
符号。


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

您可能对阅读感兴趣

引述:

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

Swing程序应该重写paintComponent(),而不是重写paint()。尽管API允许,但通常没有理由重写paintBorder()或paintComponents()(如果这样做,请确保您知道自己在做什么!)。这种因式分解使程序更容易只覆盖它们需要扩展的部分。例如,这解决了前面提到的AWT问题,即调用super.paint()失败会阻止任何轻量级子级出现

您好,在构造函数完成执行后是否立即调用paint()函数?@GMsoF
repaint()
将在需要时自动调用。如果设置动画,也可以显式调用它。尽管调用次数太多,调用速度太快,一些调用将合并(忽略)。如果要在同一面板上的组件上方的jpanel子类上绘制某些内容,也可以重写paint()。例如,如果GPanel是jpanel的子类,则只重写paintComponent,即“绘图”将位于任何组件(如按钮、其他面板等)的后面。但是,使用paint(),可以“覆盖”其他组件。
 protected void paintComponent(Graphics g)
protected void paintBorder(Graphics g)
protected void paintChildren(Graphics g)