Swing中paint,paintComponent和paintComponents之间的区别
Java Swing中paint()
, paintComponent()
和paintComponents()
之间的实际区别是什么?
我试图了解Oracle文档中的解释,但我不清楚。
- AWT,重写
paint()
。 - Swing顶级容器(egs是
JApplet
,JFrame
,JWindow
,JDialog
..),重写paint()
。 但是有一些好的理由不要在TLC中绘制。 也许是一个单独的问题的主题。 - Swing的其余部分覆盖
paintComponent()
。 - 既不重写也不显式调用
paintComponents()
,将其留给API以在需要时调用它。
每当重写一个方法时,一定要使用@Override
表示法。
这样做会提示试图覆盖JFrame
paintComponent(..)
(它没有这种方法),这是很常见的问题。
您可能有兴趣阅读AWT和Swing中的绘画
报价:
适用于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()失败的情况下阻止了任何轻量级的子节点的出现。