我正在尝试从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方法中调用位于子类中的图形方法吗?
答案 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);
}
}
}