2015-11-04 106 views
0

我正在創建一個簡單的Java2D程序。它應該從另一個類中繪製矩形,但它不起作用。如果你們中的一個人可以花一些時間看看我哪裏出錯,我會很感激。這是我明天到期的最後一項任務。從另一個類別繪製矩形

下面是我對迄今爲止的工作代碼:

Block.java

public class Block extends JPanel { 

    public Graphics2D g; 
    protected int posX = 0; 
    protected int posY = 0; 
    protected int w = 100; 
    protected int h = 100; 

    public void draw() { 
     g.setColor(Color.GREEN); 
     g.fillRect(posX, posY, w, h); 
    } 
} 

這裏是主類:

public class main { 

    private static final long serialVersionUID = 1L; 

    private Block[] pie = new Block[5]; 
    Timer timer; 

    main() { 
     final JPanel screen = new JPanel() { 

      int x = 0; 
      int step = 10; 

      public void paintComponent(Graphics g) { 

       super.paintComponent(g); 

       pie[0].g = (Graphics2D) g; 
       pie[0].draw(); 

      } 

     }; 

     JFrame f = new JFrame("Test Lab"); 
     f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     f.setContentPane(screen); 
     f.pack(); 
     f.setLocationByPlatform(true); 
     f.setResizable(false); 
     f.setVisible(true); 

    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable(){ 
      public void run(){ 
       new main(); 
      } 
     });  
    } 

} 

非常感謝。

+1

那麼問題是什麼?應該發生什麼,發生了什麼? – MikeTheLiar

+0

我不知道。控制檯上顯示幾條消息: 線程「AWT-EventQueue-0」中的異常java.lang.NullPointerException \t at main $ 1.paintComponent(main.java:54) \t at javax.swing.JComponent.paint(未知來源) 其中第54行是指pie[0].g = (Graphics2D) g; Mdkusuma

+0

請參閱http://stackoverflow.com/a/17871842/635678尋求幫助。 main.java中的第54行是什麼? –

回答

0
private Block[] pie = new Block[5]; 

您創建一個大小爲5的數組,但你還沒有添加任何阻止對數組,

pie[0].g = (Graphics2D) g; 
pie[0].draw(); 

所以,當你試圖在索引0引用的對象,你會得到一個NPE。

因此,在您的constuctor開始,你可以添加:

pie[0] = new Block(); 

而且,你的畫法應定義是這樣的:

public void draw(Graphics g) 

然後在你的繪圖代碼可以使用:

pie[0].draw(g); 

這就是你不需要在你的Block類中存儲一個Graphics對象。將Graphics對象傳遞給方法。