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

我有一个简单的类,在JPanel中绘制图形。 这是我的class级:

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构造函数中调用该方法,但我也没有看到它的调用。

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

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

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

将JComponent或JPanel子类化为绘制图形时,请覆盖paintComponent()方法。 调用此方法是因为用户使用需要重绘的用户界面执行了某些操作,或者您的代码已明确请求重新绘制它。 当它变得可见时自动调用当窗口变得可见(未覆盖或最小化)或resize时,“系统”会自动调用paintComponent()方法,用于必须重绘的所有屏幕区域。