我有一个简单的类在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构造函数中调用的,但我也没有看到它的调用.
在paintComponent从几个不同的地方调用.来电JComponent.paint可能是您正在寻找的.
请注意,paintComponent是不是从任何构造器调用.它paintComponent被称为"按需",即系统决定需要重新绘制组件时.(例如,可以在调整组件大小时,或者从最小化状态恢复窗口时.)要清楚:组件不是"涂漆,然后使用",它是"使用,然后在需要时涂漆".
整个绘画调用链都不是你应该打扰的,因为它完全由Swing和所谓的Event Dispatch Thread完成.