繁体   English   中英

从另一个类绘制矩形

[英]Drawing Rectangle From Another Class

我正在创建一个简单的Java2D程序。 应该从另一个类中绘制矩形,但是它不起作用。 如果你们中的一个人能花一点时间看一下我要去哪里错了,我将非常感激。 这是我明天的最后一项任务。

这是到目前为止我一直在处理的代码:

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

}

非常感谢。

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

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

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

因此,当您尝试引用索引为0的对象时,会得到一个NPE。

因此,在构造器的开始部分,您可以添加:

pie[0] = new Block();

另外,您的draw方法应定义为:

public void draw(Graphics g)

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

pie[0].draw(g);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM