super.paintComponent(g)做什么?

use*_*460 16 java graphics swing

super.paintComponent(g)什么(特别是当我们将它放在paintComponent()方法中时)?我很惊讶我之前没有看到有人问这个问题.

我在Java Graphics上挖掘了我的学校笔记,它在这行代码中唯一提到的是"do not delete".

但是这几周我一直在练习和使用Java paintComponent()方法.到目前为止,我没有将该行包含在我的代码中,并且一切似乎都运行良好(到目前为止).所以..

问题:

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

aio*_*obe 15

  1. 它有什么作用?

它会打印组件,就好像您没有覆盖该paintComponent方法一样.例如,如果您有背景颜色集,则通常由您要扩展的类绘制.

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

如果不在整个组件上绘画,则使用它.你不画画的部分会"透过",这意味着你应该让超级画这些部分.例如,背景颜色的示例:如果您只是在组件的中间绘制一个圆,super.paintComponent将确保在圆周周围绘制背景颜色.

如果你做的绘制你的组件的整个区域,那么你将画上任何super.paintComponent方法油漆的顶部,从而有呼吁super.paintComponent方法是没有意义的.

  1. 它通过在paintComponent()中编写它给我们带来了什么好处?

这是唯一合乎逻辑的地方.paintComponent在应该对部件进行涂漆时调用,并且如上所述,如果您不自己绘制整个部件,则需要super.paintComponent在照射部件上进行涂漆.

文档paintComponent说,它相当不错:

[...]如果你没有调用super的实现,你必须遵守不透明属性,即如果这个组件是不透明的,你必须用非透明颜色完全填充背景.如果您不遵守opaque属性,您可能会看到视觉伪影.