从另一个类绘制矩形

时间:2015-11-04 18:24:32

标签: java graphics2d java-2d

我正致力于创建一个简单的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 个答案:

答案 0 :(得分:0)

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

您创建一个大小为5的数组,但尚未向数组中添加任何Block,

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

因此,当您尝试在索引0处引用对象时,您将获得一个NPE。

因此,在构造函数的开头,您可以添加:

pie[0] = new Block();

此外,您的绘制方法应定义为:

public void draw(Graphics g)

然后在您的绘画代码中使用:

pie[0].draw(g);

那就是你不需要在Block类中存储Graphics对象。将Graphics对象传递给方法。