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

Mun*_*sir 4 java graphics class 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

它说g1没有初始化.但是如何初始化抽象类呢?

Cha*_*ere 13

那么这里有两个问题1:

    Graphics g1;
    a.paint(g1);
Run Code Online (Sandbox Code Playgroud)

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

    Graphics g1 = null;
    a.paint(g1);
Run Code Online (Sandbox Code Playgroud)

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

    anim1 a=new anim1();
    Graphics g1 = anim1.getGraphics();
    a.paint(g1);
Run Code Online (Sandbox Code Playgroud)

但是,由于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);

    }
}
Run Code Online (Sandbox Code Playgroud)

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

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