super.paintComponent(g)做什么?

时间:2015-02-25 16:40:44

标签: java swing graphics

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

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

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

问题:

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

2 个答案:

答案 0 :(得分:15)

  
      
  1. 它做了什么?
  2.   

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

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

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

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

  
      
  1. 通过在paintComponent()中编写它有什么好处?
  2.   

这是唯一合理的地方。应该在绘制组件时调用paintComponent,并且如上所述,如果您不自己绘制整个组件,则需要super.paintComponent在要透过的部件上绘制。

paintComponent的{​​{3}}说得很好:

  

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

答案 1 :(得分:3)

来自Java Painting Tutorial

  

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

相关问题