Java绘制形状错误

时间:2013-03-15 22:35:55

标签: java applet

我必须使用applet编写一个程序,它应该有3个Button行,rect,circle。点击它们时,应绘制所需的形状。

我编写了以下代码,但它显示的错误是Graphics未初始化。 现在该怎么办?

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Drawshapes extends Applet implements ActionListener
{

    Button line,rect,circle;
    public void init()
    {

        line=new Button("Line");

        rect=new Button("Rectangle");
        circle=new Button("Circle");

        add(line);
        add(circle);
        add(rect);

        line.addActionListener(this);
        rect.addActionListener(this);
        circle.addActionListener(this);
    }

    public void paint(Graphics g)
    {
    }

    public void actionPerformed(ActionEvent ae)
    {

        Graphics g;
        if(ae.getSource()==line)
        {
            g.drawLine(0,100,100,10);
        }
        else if(ae.getSource()==rect)
            {
                g.drawRect(10,10,60,50);
            }
        else
        {
                g.drawOval(10,10,50,50);
        }
    }
}

3 个答案:

答案 0 :(得分:2)

与所有局部变量一样,Graphics g需要初始化。但是,从ActionListener进行自定义绘画是一个坏主意。使用已正确实例化的Graphics方法中的paint对象。

ActionListener中设置一个标记,然后调用repaint

例如,ActionListener代表行:

drawLine = true;
repaint();

漆:

@Override
public void paint(Graphics g) {
   super.paint(g);
   if (drawLine) {
      g.drawLine(0, 100, 100, 10);
   } else if (drawRect) {
      g.drawRect(10, 10, 60, 50);
   } else {
      g.drawOval(10, 10, 50, 50);
   }
}

答案 1 :(得分:0)

您没有初始化Graphics引用。您可以通过调用Applet继承自Component的{​​{3}}方法对其进行初始化。

Graphics g = getGraphics();

答案 2 :(得分:0)

您正在调用来自g的方法,而这些方法并非初始化,因为您的错误是:您只是声明了它。

修改:正如其他人所说,您的Graphics对象是Applet的成员,可以通过方法getGraphics访问。因此,您可以在每次需要时调用此方法,或在DrawShapes类中创建成员。

Graphics g = getGraphics();
public void actionPerformed(ActionEvent ae)
{
    if(ae.getSource()==line)
    {
        g.drawLine(0,100,100,10);
    }
    // etc
}