1

我必须使用小程序编写一个程序,它应该有 3 个按钮线、矩形、圆形。单击它们后,应绘制所需的形状。

我编写了以下代码,但显示图形未初始化的错误。现在做什么?

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);
        }
    }
}
4

3 回答 3

2

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

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

例如在ActionListenerfor 行中:

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);
   }
}
于 2013-03-15T22:40:47.290 回答
0

您没有初始化您的Graphics参考。你可以通过调用继承自的getGraphics()方法来初始化它。AppletComponent

Graphics g = getGraphics();
于 2013-03-15T22:38:52.563 回答
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
}
于 2013-03-15T22:42:15.623 回答