super.paintComponent(g)
做什么(特别是当我们将它放在paintComponent()方法中时)?我很惊讶我以前没有看到有人问过这个问题。
我在Java Graphics上挖掘了我的学校笔记,它在这行代码中提到的唯一内容是"do not delete"
。
然而,这几周我一直在练习和使用Java paintComponent()方法。到目前为止,我没有将该行包含在我的代码中,并且一切似乎都运行良好(到目前为止)。所以..
问题:
答案 0 :(得分:15)
- 它做了什么?
醇>
它会打印组件,就好像您没有覆盖paintComponent
方法一样。例如,如果您有背景颜色集,则通常由您正在扩展的类绘制。
- 我们什么时候需要使用它?
醇>
如果不在整个组件上绘画,则使用它。你不画画的部分会“透过”,这意味着你应该让超级画这些部分。与背景颜色的示例一样:例如:如果您只是在组件的中间绘制一个圆,super.paintComponent
将确保在圆周周围绘制背景颜色。
如果你做绘制组件的整个区域,那么你将在任何super.paintComponent绘制之上进行绘制,因此调用super.paintComponent没有意义。
- 通过在paintComponent()中编写它有什么好处?
醇>
这是唯一合理的地方。应该在绘制组件时调用paintComponent
,并且如上所述,如果您不自己绘制整个组件,则需要super.paintComponent
在要透过的部件上绘制。
paintComponent
的{{3}}说得很好:
[...]如果你没有调用super的实现,你必须遵守opaque属性,即如果这个组件是不透明的,你必须用非不透明的颜色完全填充背景。如果您不遵守opaque属性,您可能会看到视觉伪影。
答案 1 :(得分:3)
大多数标准Swing组件的外观都由单独的“UI Delegate”对象实现。 super.paintComponent(g)的调用将图形上下文传递给组件的UI委托,该委托绘制了面板的背景。有关此过程的详细信息,请参阅上述SDN文章中标题为“绘画和UI代理”的部分。