调用paintComponent方法在重写子类时将其定义为超类的重要性。我无法理解这个原因。例如:请参阅下面的代码以显示填充弧:
package graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;
@SuppressWarnings("serial")
class DrawArcs2 extends JFrame {
public DrawArcs2() {
setTitle("The Four Fan Blades");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
add(new BladesPanel());
}
class BladesPanel extends JPanel {
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.MAGENTA);
int xCenter = getWidth() / 2;
int yCenter = getHeight() / 2;
int radius = (int)(Math.min(getWidth(), getHeight()) * 0.4);
int x = xCenter - radius;
int y = yCenter - radius;
g.fillArc(x, y, 2 * radius, 2 * radius, 0, 30);
g.fillArc(x, y, 2 * radius, 2 * radius, 90, 30);
g.fillArc(x, y, 2 * radius, 2 * radius, 180, 30);
g.fillArc(x, y, 2 * radius, 2 * radius, 270, 30);
}
}
public static void main(String[] args) {
DrawArcs2 fanBlades = new DrawArcs2();
fanBlades.setSize(300,300);
fanBlades.setVisible(true);
}
}
答案 0 :(得分:2)
简短的回答是肯定的,这很重要。
paintComponent
的其中一项工作是为绘制准备Graphics
上下文,这通常是通过使用当前组件的背景颜色填充Graphics
上下文来完成的。
但是,更重要的是,它是构成绘画方法链的方法之一,它们共同产生绘画结果,你应该继续保持链接,因为paintComponent
方法在未来或您已经扩展的组件做其他工作(例如JTable
)
未能调用它可能会导致任何数量的Graphics
毛刺和伪像难以追踪甚至可靠地产生
有关绘画过程的详细信息,请查看Painting in AWT and Swing和Performing Custom Painting
答案 1 :(得分:1)
通常很重要。如果未声明,则包含的大多数对象将无法访问。它有点像一个物体。您需要声明它以调用该类的其他函数。