Кто вызывает метод paintComponent () в моем классе? - PullRequest
5 голосов
/ 14 сентября 2011

У меня есть простой класс, который рисует графику в JPanel.Это мой класс:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;

class Drawing_panel extends JPanel {
    public void paintComponent(Graphics g) {
    super.paintComponent(g);       
    this.setBackground(Color.white);
    g.setColor(Color.red);
    g.fillRect(150, 80, 20, 20);
}  

public Dimension getPreferredSize(){
    return new Dimension(500,500);
}

}

У меня есть другой класс, который его создает:

Drawing_panel dp = new Drawing_panel();

В классе Drawing_panel нет конструктора/ или нет явного вызова методов paintComponent() или getPreferredSize().Я предполагаю, что метод вызывается в родительском конструкторе JPanel, но я также не видел там вызовов.

Ответы [ 2 ]

6 голосов
/ 14 сентября 2011

paintComponent вызывается из нескольких разных мест.Вероятно, вам нужен вызов из JComponent.paint.

Обратите внимание, что paintComponent - это , который не вызывается ни одним конструктором .paintComponent называется "по требованию" , т.е. когда система решает, что компонент необходимо перерисовать.(Может быть, например, когда размер компонента изменяется, или когда окно восстанавливается из свернутого состояния.) Для ясности: компонент не «окрашен, затем используется», он «используется, затем окрашивается при необходимости».

Эта целая цепочка вызовов рисования - это не то, о чем вам следует беспокоиться, поскольку об этом полностью заботятся Swing и так называемая нить рассылки событий.

3 голосов
/ 14 сентября 2011

Когда вы создаете подкласс JComponent или JPanel для рисования графики, переопределите метод paintComponent ().Этот метод вызван тем, что пользователь сделал что-то с пользовательским интерфейсом, который требовал перерисовки, или ваш код явно запросил, чтобы он был перерисован.Вызывается автоматически, когда оно становится видимым. Когда окно становится видимым (непокрытым или уменьшенным) или изменяется, «система» автоматически вызывает метод paintComponent () для всех областей экрана, которые необходимо перерисовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...