В чем разница между paint & paintComponents?

Написал небольшой участок кода для теста отрисовки изображения

import javax.swing.*;
import java.awt.*;

public class MainWindow extends JFrame {

    private Image avt;

    public MainWindow()
    {
        setSize(800, 500);
        setLocation(500, 0);
        setVisible(true);

        load_img();
    }
    public void load_img()
    {
        ImageIcon avatar = new ImageIcon("avatar.png");
        avt = avatar.getImage();
    }

    public void paintComponents(Graphics g) {
        super.paintComponents(g);
        g.drawImage(avt, 0, 20, this);
    }

    public static void main(String[] args)
    {
        MainWindow mw = new MainWindow();
    }
}


Однако paintComponents в данном случае просто не работает.
Если заменить его на paint, то соответственно все отрисует.

Так в чем собственно разница? И почему paintComponents в данном случае даже не запускается в процессе выполнения кода?
  • Вопрос задан
  • 262 просмотра
Пригласить эксперта
Ответы на вопрос 1
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
Вообще в awt и свинге тонны рефлексий и неявных вызовов, тема достаточно сложная проще говоря.
Хорошо разжевано тут немного.

Конкретно у вас вероятно не хватает аннотации override и в названии метода ошибка в виде лишней буквы в конце paintComponentS . Ну и я до конца не уверен т.к. не помню точно, но кажется что именно paintComponent вызывается при полной отриосвке компонента что редко т.к. все остальное время будет дергаться метод paint в котором нет вашей картинки. Как то так.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы