两者之间的实际区别是什么 paint(), paintComponent()paintComponents() 在 Java Swing 中?

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

有帮助吗?

解决方案

  • AWT,覆盖 paint().
  • Swing 顶级容器(例如 JApplet, JFrame, JWindow, JDialog..), 覆盖 paint(). 。但有很多充分的理由 不是 在 TLC 中进行绘制。也许是一个单独问题的主题。
  • Swing 的其余部分,覆盖 paintComponent().
  • 既不重写也不显式调用 paintComponents(), ,交给API在需要的时候调用即可。

请务必同时使用 @Override 每当重写方法时都使用符号。

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

其他提示

你可能有兴趣阅读绘画在awt和swing

一个引用:

适用于AWT的轻量级组件的规则也适用于Swing组件 - 例如,Paint()在渲染时被调用 - 除了将Paint()将Paint()呼叫进入三个单独的方法之外按以下顺序调用:

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

Swings程序应覆盖PaintComponent()而不是覆盖油漆()。虽然API允许它,但通常没有理由覆盖PaintBorder()或PaintComponents()(如果您这样做,请确保您知道您正在做什么!)。这种分解使得程序更容易覆盖他们需要扩展的绘画的一部分。例如,这解决了之前提到的AWT问题,其中失败调用super.paint()阻止任何轻量级的孩子出现。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top