将按钮从 ArrayList 添加到 JPanel 中的 NullPointerException



我得到了一个NullPointerException,我不知道为什么。如果有人可以查看我的代码并告诉我它出了什么问题,那就太好了。

提示:构建一个按钮金字塔,其输入1) 块宽度2) 块高度3) 行号

import java.awt.*;
import java.util.*;
import javax.swing.*;

public class BlockPyramidBuilder extends JPanel{
public static int height;
public static int width;
public static int rowNum;
public static JFrame frame = new JFrame();
public static Graphics g;
public static BlockPyramidBuilder test;
public static void main(String[]Args){
    Scanner inputReader = new Scanner(System.in);
    System.out.print("Block Height ------->" );
    height = inputReader.nextInt();
    System.out.print("Block Width ------->" );      
    width = inputReader.nextInt();
    System.out.print("Row Num ------->" );
    rowNum = inputReader.nextInt();
    test = new BlockPyramidBuilder(height, width, rowNum);
    frame.add(test);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}
public BlockPyramidBuilder(int height, int width, int rowNum){
    ArrayList<MyBox> array = new ArrayList<MyBox>();
    int center = frame.getWidth();
    int x = 0;
    int y = 0;          

    for(int i = 1; i <= rowNum; i++){
        y = height * (i-1);
        for(int j = 1; j <= i; j++){
            x = center + (width/2) * j;
            System.out.println("x: " + x + "      y: " + y);
            MyBox r = new MyBox(x, y, width, height);
            array.add(r);
        }
    }
    for(int i = 0; i < array.size(); i++){
        test.add(array.get(i));
    }
}
}
class MyBox extends JButton{
public MyBox(int x, int y, int height, int width){
    super();
    setBackground(new java.awt.Color(37, 80, 130));
    setFont(new java.awt.Font("Trebuchet MS", 0, 24));
    setForeground(new java.awt.Color(38,38,38));
    setSize(height, width);
    setLocation(x, y);
}
}

代码获取正确的坐标来绘制框,但是将 MyBox 添加到 JPanel 时出错。另外,我想知道

在构造函数 BlockPyramidBuilder 中,引用在构造函数完成之前未设置的测试对象。

test 在调用构造函数之前未初始化,您尝试在构造函数中使用它。因此,你会得到一个NullPointerException

此外,您不应该将所有这些变量声明static .你有一个类,它应该有实例变量。

相关内容

  • 没有找到相关文章

最新更新