Background Bild in einem JFrame

Diese Frage wurde oft gestellt, aber überall bleiben die Antworten unbeantwortet. Ich kann einen JFrame dazu bringen, ein Hintergrundbild anzuzeigen, indem ich JPanel erweitere und paintComponent überschreibe, wie folgt:

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

Aber jetzt, wie fügt man eine Komponente über diesen Hintergrund? Wenn ich geh

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)

Es zeigt das kleine rote Quadrat (oder eine andere Komponente) und nicht den Hintergrund, aber wenn ich @ entfercp.setLayout(null);, der Hintergrund erscheint aber nicht meine andere Komponente. Ich vermute, das hat etwas damit zu tun, dass paintComponent nicht vom null-LayoutManager aufgerufen wird, aber ich bin überhaupt nicht mit der Funktionsweise von LayoutManager vertraut (dies ist ein Projekt für das College, und die Aufgabe besagt ausdrücklich, keinen LayoutManager zu verwenden). .

Wenn ich ein Bild anfertige, dessen Hintergrund null (und damit transparent (??)) sein muss, wird das rote Quadrat angezeigt, sodass der Hintergrund möglicherweise tatsächlich über meinen anderen Komponenten liegt.

Hat jemand irgendwelche Ideen?

Vielen Dan

Antworten auf die Frage(3)

Ihre Antwort auf die Frage