当前位置: 首页 > 知识库问答 >
问题:

从另一个类绘制矩形

琴俊良
2023-03-14

我正在创建一个简单的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个答案

鲜于浩淼
2023-03-14
private Block[] pie = new Block[5];

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

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

所以当你试图引用索引为0的对象时,你会得到一个NPE。

所以在构造函数的开头,你可以加上:

pie[0] = new Block();

此外,您的绘制方法应按如下方式定义:

public void draw(Graphics g)

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

pie[0].draw(g);

也就是说,您不需要在Block类中存储图形对象。将图形对象传递给方法。

 类似资料:
  • 本节课通过绘制一个矩形边框效果,对WebGL整个渲染流程有一个简单认知。 学习建议 学习本节课,建议先结合注释看看案例源码,对于不熟悉的WebGL API可以在MDN搜索文档,不过刚开始学习,没必要去掌握每一个WebGL API,把主要精力放在理解WebGL的整个渲染流程上面,如果你能建立渲染管线的概念,自然对WebGL系统会有一个基本的认知。 源码体验测试 //类型数组构造函数Float32Ar

  • 问题内容: 我知道这是我的错误。我的问题是,为什么这不起作用,我想念的是什么,我可以称其为方法而不是类,因此我假设他们的第三类有问题吗? 第1类: } 第2类: 第3类,这是我不能在jframe上使用的绘画: } 问题答案: 您的问题是您滥用继承。您的JVMDiagram正在扩展JVMComponent,但不应该。是的,您获得了JVMComponent的getWidth()和getHeight()

  • 本文向大家介绍php绘制一个矩形的方法,包括了php绘制一个矩形的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php绘制一个矩形的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的php程序设计有所帮助。

  • 使用closePath()闭合图形 首先我们用上节课的方法绘制一个矩形。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UT

  • 问题内容: 如何绘制具有Alpha颜色的矩形?我有: 但是我希望白色矩形的透明度为50%,但是Alpha值似乎没有起作用。 问题答案: 函数将不使用Alpha绘制。该文件说: 大多数参数接受RGB三元组的color参数。这些也可以接受RGBA四联体。如果Alpha值包含像素Alpha,则它将直接写入Surface,但是draw函数不会透明地绘制。 您可以做的是创建第二个曲面,然后将其调高到屏幕上。

  • 我正在制作一个类似飞鸟的飞机游戏,在一个类中,我有移动的背景,然后我将其添加到主jPanel中,它在自己的类中,在另一个类中,我有玩家,我将其添加到主jPanel中。但是,当我将第二个类添加到JPanel时,我添加的第一个类将消失。这是我的背景课: 这是我的平面类:导入java.awt.图形;导入java.awt.event.动作事件;导入java.awt.event.动作监听器;导入java.a