2015-11-04 105 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对象传递给方法。