我必须使用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);
}
}
}
答案 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
}