Cette question a été posée beaucoup mais partout les réponses sont insuffisantes. Je peux obtenir un JFrame pour afficher une image d'arrière-plan très bien en étendant JPanel et paintComponent primordial, comme ceci:Image de fond dans un JFrame
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);
}
}
Mais maintenant, comment voulez-vous ajouter un composant au-dessus de ce contexte? Quand je vais
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)
Il montre le petit carré rouge (ou tout autre composant) et non l'arrière-plan, mais quand je retire cp.setLayout(null);
, l'arrière-plan apparaît, mais pas mon autre composant. Je suppose que ceci a quelque chose à faire avec le paintComponent qui n'est pas appelé par LayoutManager null, mais je ne suis pas du tout familier avec LayoutManagers (c'est un projet pour le collège et l'affectation dit spécifiquement de ne pas utiliser LayoutManager) .
Lorsque je crée l'image, l'arrière-plan doit afficher null (et donc, transparant (??)) le carré rouge apparaît donc il se peut que l'arrière-plan soit réellement au-dessus de mes autres composants.
Quelqu'un a-t-il des idées?
Merci
Espérons que ce [thread] (http://stackoverflow.com/a/11428289/1057230) pourrait aussi être utile, sur le sujet :-) –