This is my block class:

```
public class Block extends JComponent {
    public int width, height;
    public Color colour;

    public Block( int width, int height, Color colour) {
        super();
        setSize(new Dimension(width, height));
        setPreferredSize(new Dimension(width, height));
        setBackground(colour);
        this.width = width;
        this.height = height;
        this.colour = colour;
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(colour);
        g.fillRect(0, 0, width, height);
    }
}

```

And my ball class:

```
public class Ball extends JComponent {
    public int width, height;
    public Color colour;

    public Ball(int width, int height, Color colour) {
        super();
        setSize(new Dimension(width, height));
        setPreferredSize(new Dimension(width, height));
        setBackground(colour);
        this.width = width;
        this.height = height;
        this.colour = colour;
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(colour);
        g.fillOval(0, 0, width, height);
    }
}

```

And this is my Main class:

```
public class Main extends JPanel {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setContentPane(new Main());
        frame.setSize(new Dimension(1000, 1000));
        frame.setPreferredSize(new Dimension(1000, 1000));
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public Main() {
        JComboBox<String> shapes = new JComboBox(new String[]{"Square", "Oval"});

        JSpinner width = new JSpinner();
        SpinnerNumberModel widthModel = new SpinnerNumberModel();
        widthModel.setMinimum(1);
        widthModel.setMaximum(200);
        width.setModel(widthModel);

        JSpinner height = new JSpinner();
        SpinnerNumberModel heightModel = new SpinnerNumberModel();
        heightModel.setMinimum(1);
        heightModel.setMaximum(200);
        height.setModel(heightModel);

        JButton submit = new JButton("Add Shape");
        submit.addActionListener((ActionEvent e) -> {
            if (shapes.getSelectedItem().equals("Square")) {
                add(new Block((Integer)widthModel.getValue(), (Integer)heightModel.getValue(), Color.BLUE));
            } else {
                add(new Ball((Integer)widthModel.getValue(), (Integer)heightModel.getValue(), Color.BLUE));                
            }
        });

        add(shapes);
        add(width);
        add(height);
        add(submit);

    }
}

```

When you click the "submit" button, it should add either a square or an oval (depending on your choice), with the height and width of which you specify in the spinners. However, it does not have anything. I printed out the width and height and they were valid, so there is no problem with that. Also, I tried adding the custom components by themselves and it worked.