0

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

        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 方法中按预期工作,但它必须在子类中。

谢谢你的帮助。

编辑添加...

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

4

1 回答 1

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

    }
}
于 2013-10-01T20:57:51.150 回答