super.paintComponent(g)做什么? [英] What does super.paintComponent(g) do?

查看:351
本文介绍了super.paintComponent(g)做什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

super.paintComponent(g) do(特别是当我们把它放在paintComponent()方法中时)是什么?我很惊讶我没有看到任何人在SO之前提出这样的问题。



我在Java Graphics上挖掘了我的学校笔记,这是它在这行代码中提到的唯一的东西但是我一直在练习和搭配Java paintComponent()方法,它们是do not delete。

几个星期。到目前为止,我还没有将该行纳入我的代码中,并且一切似乎都很顺利(到目前为止)。所以..



问题:


  1. 它是做什么的?

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

  3. 它通过将它写入paintComponent() li>


解决方案





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



  1. 何时需要使用它?


不要在整个组件上绘画。你不会画的部分会发光,这意味着你应该让超级画家画这些部分。就像背景颜色的例子一样:如果你只是在组件的中间画一个圆, super.paintComponent 将确保背景颜色被绘制在圆形。



如果您要绘制组件的整个区域,那么您将绘制任何super.paintComponent绘画的顶部,因此在调用super.paintComponent时没有意义。



  1. 它在paintComponent()?


这是唯一合乎逻辑的地方。当组件被绘制时调用 paintComponent ,如上所述,如果你不自己绘制整个组件,则需要 super。



/docs/api/javax/swing/JComponent.html#paintComponent%28java.awt.Graphics%29\"> paintComponent 的文档说得很好:


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



What does super.paintComponent(g) do (especially when we place it inside paintComponent() method)? I am surprised I don't see anyone asking this in SO before.

I dig out my school notes on Java Graphics, the only thing it mentioned on this line of code is "do not delete".

However I have been practicing and tying out on Java paintComponent() method these few weeks. So far I have not included that line into my codes, and everything seems to work well (so far). So..

Questions:

  1. What does it do?
  2. When do we need to use it?
  3. What advantage does it gives us by writing it in paintComponent()?

解决方案

  1. What does it do?

It prints the component as if you hadn't overridden the paintComponent method. If you have a background color set for instance, this is typically painted by the class you're extending.

  1. When do we need to use it?

You use it if you don't paint on the entire component. The parts that you don't paint will "shine through" which means that you should let the super class paint those parts. As with the example of the background color for instance: If you just paint a circle in the middle of the component, super.paintComponent will make sure the background color is painted around the circle.

If you do paint the entire area of your component, then you will paint on top of whatever super.paintComponent paints and thus there's no point in calling super.paintComponent.

  1. What advantage does it gives us by writing it in paintComponent()?

That's the only logical place to put it. paintComponent is called when the component should be painted, and, as mentioned above, if you don't paint the entire component yourself, you need super.paintComponent to paint on the parts that shine through.

The documentation of paintComponent says it pretty well:

[...] if you do not invoker super's implementation you must honor the opaque property, that is if this component is opaque, you must completely fill in the background in a non-opaque color. If you do not honor the opaque property you will likely see visual artifacts.

这篇关于super.paintComponent(g)做什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆