谁在我的类中调用paintComponent()方法?

jam*_*mer 5 java swing

我有一个简单的类在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);
}
Run Code Online (Sandbox Code Playgroud)

}

我有另一个实例化这个的类:

Drawing_panel dp = new Drawing_panel();
Run Code Online (Sandbox Code Playgroud)

Drawing_panel类中没有构造函数和/或没有显式调用paintComponent()getPreferredSize()方法.我假设该方法是在父JPanel构造函数中调用的,但我也没有看到它的调用.

aio*_*obe 6

paintComponent从几个不同的地方调用.来电JComponent.paint可能是您正在寻找的.

请注意,paintComponent不是从任何构造器调用.它paintComponent被称为"按需",即系统决定需要重新绘制组件时.(例如,可以在调整组件大小时,或者从最小化状态恢复窗口时.)要清楚:组件不是"涂漆,然后使用",它是"使用,然后在需要时涂漆".

整个绘画调用链都不是你应该打扰的,因为它完全由Swing和所谓的Event Dispatch Thread完成.