2013-03-15 180 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