super.paintComponent(g) 是做什么的?

2022-09-03 02:07:21

做什么(特别是当我们把它放在paintComponent()方法中时)?我很惊讶我以前在SO中没有看到任何人问这个问题。super.paintComponent(g)

我挖出了我在Java图形上的学校笔记,这行代码中唯一提到的是。"do not delete"

然而,这几周我一直在练习和捆绑Java paintComponent()方法。到目前为止,我还没有将那行包含在我的代码中,而且一切似乎都运行良好(到目前为止)。所以。。

问题:

  1. 它有什么作用?
  2. 我们什么时候需要使用它?
  3. 用paintComponent()编写它能给我们带来什么好处?

答案 1
  1. 它有什么作用?

它会打印组件,就好像您没有重写该方法一样。例如,如果您设置了背景色,则通常由要扩展的类绘制。paintComponent

  1. 我们什么时候需要使用它?

如果不在整个组件上绘画,则可以使用它。你不画的部分会“闪耀”,这意味着你应该让超类涂上这些部分。例如,与背景色的示例一样:如果您只是在组件的中间绘制一个圆圈,将确保背景色绘制在圆圈周围。super.paintComponent

如果你确实绘制了组件的整个区域,那么你将在任何super.paintComponent油漆的顶部绘画,因此调用super.paintComponent是没有意义的。

  1. 用paintComponent()编写它能给我们带来什么好处?

这是唯一合乎逻辑的地方。 在应绘制组件时调用,并且如上所述,如果您不自己绘制整个组件,则需要在发光的部分上绘制。paintComponentsuper.paintComponent

的文档说得非常好:paintComponent

[...]如果不调用 super 的实现,则必须遵守不透明属性,也就是说,如果此组件是不透明的,则必须以非不透明的颜色完全填充背景。如果不遵循不透明属性,则可能会看到视觉伪影。


答案 2

来自 Java 绘画教程

大多数标准 Swing 组件的外观和感觉都由单独的“UI 委托”对象实现。对 super.paintComponent(g) 的调用将图形上下文传递给组件的 UI 委托,后者绘制面板的背景。若要详细了解此过程,请参阅上述 SDN 文章中标题为“绘画和 UI 委托”的部分。


推荐