在子类中调用图形方法

时间:2013-10-01 20:48:56

标签: java swing inheritance graphics awt

我正在尝试从main方法调用子类中的图形方法。我的图形调用有问题。这就是我正在做的事情:

        Graphics gr = null;
        frame.paint(childClass.repaint(gr));

当我执行代码时,我得到一个NullPointerException,大概是因为图形对象被设置为null。但是,如果我不这样做,代码将不会执行,因为图形对象未初始化。 这里参考的是我在子类中调用的代码:

public Graphics repaint(Graphics gr)
{

   super.paint(gr);

   setEyes();


   Color eyeColor = Color.BLACK;
   gr.setColor(getColour());
   gr.fillOval(50, 100, getHeadSize(), getHeadSize());       
   int count;
   int offset = 90;
   for(count = 0; count < getEyes(); count++)
   {
       gr.setColor(eyeColor);
       gr.fillOval(offset, 150, 15, 15);
       offset = offset+50;
   }

   gr.setColor(getColour());
   gr.drawLine(125, 250, 125, 250+getBodyHeight());
   gr.drawLine(75, 275, 75+getBodyWidth(), 275);
   gr.drawLine(75, 275, 60, 275+getArmLength());
   gr.drawLine(75+getBodyWidth(), 275, 90+getBodyWidth(), 275+getArmLength());
  return gr;
}

请注意,绘图代码在main方法中编写时可以正常工作,但它必须位于子类中。

感谢您的帮助。

编辑添加...

我需要能够从子类中调用它。无论如何都要从main方法中调用位于子类中的图形方法吗?

1 个答案:

答案 0 :(得分:0)

在处理绘画时,最好的做法是覆盖paintComponent并在那里完成所有绘图。之后,只要您需要更新场景,请致电repaint并仅repaint。以下是如何使用此方法的快速示例:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JComponent;

public class Painter extends JComponent{

    private Art myArt = new Art();

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        final Graphics2D g2d = (Graphics2D) g;
        myArt.draw(g2d);

    }


    private class Art{

        public void draw(Graphics2D g2d){
            g2d.setColor(Color.RED);
            g2d.fillRect(0, 0, 50, 50);
        }

    }
}