Ответ 1
- Что он делает?
Он печатает компонент так, как будто вы не переопределили метод paintComponent
. Если у вас есть цвет фона, например, это обычно окрашивается классом, который вы расширяете.
- Когда нам нужно его использовать?
Вы используете его, если не рисуете весь компонент. Части, которые вы не рисуете, будут "сиять", что означает, что вы должны позволить суперклассическому рисовать эти части. Например, например, на примере цвета фона: Если вы просто рисуете круг в середине компонента, super.paintComponent
будет следить за тем, чтобы цвет фона был нарисован вокруг круга.
Если вы нарисуете всю область своего компонента, тогда вы нарисуете поверх того, что красит super.paintComponent, и, таким образом, нет смысла в вызове super.paintComponent.
- Какое преимущество дает нам, написав его в paintComponent()?
Это единственное логическое место. paintComponent
вызывается, когда компонент должен быть окрашен, и, как упоминалось выше, если вы не рисуете весь компонент самостоятельно, вам нужно super.paintComponent
рисовать на деталях, которые светятся.
Документация paintComponent
говорит об этом довольно хорошо:
[...], если вы не выполняете суперверсию invoker, вы должны соблюдать непрозрачное свойство, то есть, если этот компонент непрозрачен, вы должны полностью заполнить фон непрозрачным цветом. Если вы не соблюдаете непрозрачную собственность, вы, скорее всего, увидите визуальные артефакты.