Фоновое изображение в JFrame

Этот вопрос задавался много, но везде ответы не дают. Я могу заставить JFrame нормально отображать фоновое изображение, расширяя JPanel и переопределяя paintComponent, вот так:

class BackgroundPanel extends JPanel {
    private ImageIcon imageIcon;
    public BackgroundPanel() {
        this.imageIcon = Icons.getIcon("foo");
  }

    @Override
    protected void paintComponent(Graphics g) {
       super.paintComponent(g);
        g.drawImage(imageIcon.getImage(), 0,0,imageIcon.getIconWidth(),imageIcon.getIconHeight(),this);
    }
}

Но теперь, как вы добавляете компонент поверх этого фона? Когда я иду

JFrame w = new JFrame() ;
Container cp = w.getContentPane();
cp.setLayout(null);

BackgroundPanel bg = new BackgroundPanel();
cp.add(bg);

JPanel b = new JPanel();
b.setSize(new Dimension(30, 40));
b.setBackground(Color.red);
cp.add(b);
w.pack()
w.setVisible(true)

Он показывает маленький красный квадрат (или любой другой компонент), а не фон, но когда я удаляюcp.setLayout(null);, фон показывает, но не мой другой компонент. Я предполагаю, что это как-то связано с тем, что paintComponent не вызывается нулевым LayoutManager, но я совсем не знаком с тем, как работает LayoutManager (это проект для колледжа, и в задании специально сказано не использовать LayoutManager) ,

Когда я создаю изображение, фон должен показывать ноль (и, таким образом, прозрачный (??)) красный квадрат, поэтому возможно, что фон на самом деле выше моих других компонентов.

У кого-нибудь есть идеи?

Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос