调用super.paintComponent()很重要吗?

时间:2015-04-20 07:20:14

标签: java

调用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);
    }
}

2 个答案:

答案 0 :(得分:2)

简短的回答是肯定的,这很重要。

paintComponent的其中一项工作是为绘制准备Graphics上下文,这通常是通过使用当前组件的背景颜色填充Graphics上下文来完成的。

但是,更重要的是,它是构成绘画方法链的方法之一,它们共同产生绘画结果,你应该继续保持链接,因为paintComponent方法在未来或您已经扩展的组件做其他工作(例如JTable

未能调用它可能会导致任何数量的Graphics毛刺和伪像难以追踪甚至可靠地产生

有关绘画过程的详细信息,请查看Painting in AWT and SwingPerforming Custom Painting

答案 1 :(得分:1)

通常很重要。如果未声明,则包含的大多数对象将无法访问。它有点像一个物体。您需要声明它以调用该类的其他函数。