Вопрос по компоненту Paint

#java #swing #paintcomponent

#java #swing #paintcomponent

Вопрос:

Какой цели служит super.paintComponent(g) в этом примере кода?

 protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.GRAY);
    g.fillRect(gridX * 50, gridY * 50, 50, 50);
    for (int i = 0;i < 10; i  ) {
        for (int j = 0;j < 10; j  ) {
            if (savedTiles[i][j])
                g.fillRect(i * 50, j * 50, 50, 50);
        }
    }
}
  

Комментарии:

1. Это гарантирует, что родительский компонент рисует первым

2. Может ли юз поместить сюда полный класс? супер — это download.oracle.com/javase/tutorial/java/IandI/super.html

3. @Kaj, это не имеет ничего общего с «родительским». Сначала он вызывает функциональность компонента по умолчанию, прежде чем добавлять настройки. В этом случае я бы предположил, что переопределяется JPanel, и в этом случае функциональность по умолчанию заключается в том, чтобы нарисовать фон компонента. Как только это будет сделано, пользовательский код нарисует прямоугольники поверх фона.

4. Хорошо, я согласен, что это могло быть неверно истолковано. Я не говорил о макете и иерархии компонентов, для меня панель, которую он расширил, является родительской (т. е. super)

5. (То есть я говорил об иерархии наследования)

Ответ №1:

Ответ №2:

Это зависит от того, из какого суперкласса вы переопределяете paintComponent -метод. Но в качестве ответа он предназначен для вызова версии суперкласса того же метода перед запуском переопределенного.