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