super.paintComponent(g)的作用是什么



super.paintComponent(g)做什么(尤其是当我们将其放置在paintComponent()方法中时)?我很惊讶以前在SO中没有看到有人问这个问题。

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

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

问题:

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

它打印组件,就好像您没有重写paintComponent方法一样。例如,如果你有一个背景颜色集,它通常是由你扩展的类绘制的。

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

如果不在整个零部件上绘制,则可以使用它。你没有画的部分会"发光",这意味着你应该让超级类画那些部分。例如,与背景颜色的示例一样:如果您只是在组件的中间绘制一个圆,super.paintComponent将确保背景颜色围绕该圆绘制。

如果绘制组件的整个区域,那么您将在super.paintComponent绘制的任何区域上进行绘制,因此调用super.paintComponent.没有意义

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

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

paintComponent的文档很好地说明了这一点:

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

来自Java绘画教程:

大多数标准Swing组件的外观都是由单独的"UIDelegate"对象实现的。super.paintComponent(g)的调用将图形上下文传递给组件的UI代理,UI代理绘制面板的背景。有关此过程的详细信息,请参阅前面提到的SDN文章中题为"绘画和UI代理"的部分。

相关内容

  • 没有找到相关文章

最新更新