Swing中paint、paintComponent和paintComponents的区别
-
29-10-2019 - |
题
两者之间的实际区别是什么 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()阻止任何轻量级的孩子出现。
不隶属于 StackOverflow