如何在Java中初始化Graphics对象?

时间:2009-12-27 06:20:26

标签: java class graphics abstract

这是代码:

import java.awt.*;
import java.applet.*;

public class anim1 extends Applet{

    public void paint (Graphics g)
    {
        g.drawString("",400,300);
    }

    public static void main(String ad[])
    {
        anim1 a=new anim1();
        Graphics g1;
        a.paint(g1);
    }
}

它表示g1未初始化。但是如何初始化抽象类呢?

7 个答案:

答案 0 :(得分:13)

这里有两个问题1:

    Graphics g1;
    a.paint(g1);

您收到G1未初始化的错误。那是因为变量g1永远不会设置为任何东西,这会导致编译错误。要获得编译代码,您至少需要这样做:

    Graphics g1 = null;
    a.paint(g1);

然而,这显然不会帮助你太多。当您尝试运行代码时,您将收到NullPointerException。为了实际绘制你的图形,你需要这样做:

    anim1 a=new anim1();
    Graphics g1 = anim1.getGraphics();
    a.paint(g1);

然而,由于Anim1不会出现在屏幕上,因此仍无效。要让它出现在屏幕上,您需要以下内容:

import java.awt.*;
import javax.swing.*;
import java.applet.*;

public class So1 extends Applet{

    public void paint (Graphics g)
    {
        g.drawString("hello",40,30);
    }

    public static void main(String ad[])
    {

        JFrame jp1 = new JFrame();
        So1 a=new So1 ();
        jp1.getContentPane().add(a, BorderLayout.CENTER);
        jp1.setSize(new Dimension(500,500));
        jp1.setVisible(true);

    }
}

现在注意,我们实际上并没有自己调用paint()函数。这是由awt处理的,它实际上选择了图形上下文,并为我们调用了paint函数。但是,如果你想要,你可以传入你想要的任何图形对象,并要求它绘制它。 (所以如果你想将你的组件绘制到图像上,你可以这样做)

(注意,我将类名从anim1更改为So1)

答案 1 :(得分:1)

applet不需要像常规Java应用程序那样的main方法。我建议从Sun's Applets Tutorial开始。特别是,您可能希望跳到Life Cycle of an Applet部分,以了解如何在applet中处理Graphics对象。

答案 2 :(得分:1)

您需要做的只是删除主要方法,如下所示:

import java.awt.*;
import java.applet.*;

public class anim1 extends Applet {

    public void paint (Graphics g) {
        g.drawString("Hello",100,100);
    }
}

答案 3 :(得分:0)

您应该在paint方法中操作组件的图形并调用repaint()或update(),而不是直接调用paint方法。

开始here以获取更多信息。

答案 4 :(得分:0)

而不是调用paint(Graphics g),您需要调用repaint或update方法。但为此,您的类必须属于java.awt.Container中的层次结构。

对于您的班级,您已经覆盖了Paint方法,并且您正在尝试调用paint方法。您需要调用repaint或update方法(如果您的类位于java.awt.Container的层次结构中)而不是paint,而java的事件调度系统会调用您重写的paint方法本身。

答案 5 :(得分:0)

你没有初始化Graphics对象。

您可以通过Component#getGraphics()方法从组件中获取图形对象。

在您的特定情况下,我认为repaint()就是您所需要的!

答案 6 :(得分:0)

你没有,你使用getGraphics,但是,如果你真的想要初始化它,那么输入new Graphics(){};并且尽情享受所有抽象方法。大多数情况下只需要将代码放在paint(g)中就可以了,你需要记住将applet设置为可见,通常,它应该是构造函数中的最后一行,甚至在它之外,我曾经犯过一次错误变得可见,然后初始化了一堆变量,它显示了一段黑屏。