Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在子类中调用图形方法_Java_Swing_Inheritance_Graphics_Awt - Fatal编程技术网

Java 在子类中调用图形方法

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

我试图从main方法调用子类中的graphics方法。我对图形调用有问题。以下是我正在做的:

        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