Java 在子类中调用图形方法
我试图从main方法调用子类中的graphics方法。我对图形调用有问题。以下是我正在做的:Java 在子类中调用图形方法,java,swing,inheritance,graphics,awt,Java,Swing,Inheritance,Graphics,Awt,我试图从main方法调用子类中的graphics方法。我对图形调用有问题。以下是我正在做的: Graphics gr = null; frame.paint(childClass.repaint(gr)); 当我执行代码时,我得到一个NullPointerException,大概是因为图形对象被设置为null。但是,如果我不这样做,代码将不会执行,因为图形对象没有初始化。 以下是我在子类中调用的代码供参考: public Graphics repaint(Gra
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;
}
公共图形重绘(图形gr)
{
超级油漆(gr);
眼轮虫();
Color eyeColor=Color.BLACK;
gr.setColor(getcolor());
gr.fillOval(50100,getHeadSize(),getHeadSize());
整数计数;
整数偏移=90;
对于(count=0;count
请注意,当在main方法中编写图形代码时,其工作原理与预期相同,但必须在子类中
谢谢你的帮助
编辑以添加
我需要能够从儿童课上调用这个。是否需要从main方法调用位于子类中的graphics方法?在处理绘制时,最好的做法是重写
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);
}
}
}
为了更快地获得更好的帮助,请发布一个。问题不包含在我发布的repaint类中。它只是作为参考。如果你读了这篇文章的第一部分,你会发现这个问题非常精确。这是我的评论吗?我看不到任何与发布SSCCE有关的内容。你会发现这个问题非常精确,“我看到的是一篇甚至不包含一个“?”的帖子。”。如果您有问题,请在末尾添加一个。Painter是Java为synth Painter保留的单词,可能会出现错误。我明白了,但是选择类名是为了强调每个角色,而不是为了进入生产代码:P