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