2013-03-15 73 views
1

我不得不使用小程序来编写一个程序,它应该有3个按钮线,矩形,他们circle.Upon单击所需的形状应绘制。的Java绘制形状误差

我写了下面的代码,但它显示出图形未初始化错误。 现在该怎么办?

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

回答

2

与所有的局部变量,该Graphicsg需要进行初始化。然而,从ActionListener做定制绘画是一个坏主意。使用已正确实例化的paint方法中的Graphics对象。

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

例如在ActionListener线路:

drawLine = true; 
repaint(); 

漆:从g

@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); 
    } 
} 
+0

确定我会努力做到这一点使用油漆methos – Amol 2013-03-15 22:43:12

+0

我一定要显示按钮,所以我需要使用ActionListener.How我可以绘制它使用paint方法的单击事件的形状? – Amol 2013-03-15 22:46:44

+0

设置一个标志(最好是'enum'),然后调用'repaint'。上述 – Reimeus 2013-03-15 22:47:57

0

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

Graphics g = getGraphics(); 
+0

错误的方式去风俗画。看到接受的答案。 – 2013-03-17 00:31:32

0

您正在调用方法这不是初始化的,因为你的错误说:你只有declar编辑它。

编辑:正如其他人所说,你Graphics对象是Applet成员,是从方法getGraphics访问。因此,您可以在每次需要时调用此方法,或者在您的类中创建一个成员。

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

是一个抽象类,我们如何可以实例描述的? – Amol 2013-03-15 22:45:12

+0

错误的方式去关于自定义绘画。看到接受的答案。 – 2013-03-17 00:32:14

+0

嗯,问题是'g'未初始化,而不是摆动。 – 2013-03-17 11:11:24