2009-10-10 5 views
0

J'ai un problème pour ajouter un JPanel au-dessus d'un Image. Voilà ce que je suis en train de faire:Images et panneaux

Image bgImage = loadImage(filename); 
JPanel jp = new JPanel(); 

jp.setBounds(100,100,100,100); 
jp.setOpaque(true); 
jp.setBackgroudColor(Color.red); 

bgImage.add(jp); 

Après avoir fait cela, je ne vois le bgImage. J'ai tout essayé mais je ne peux toujours pas montrer le panneau. Quelqu'un peut-il m'aider?

+0

Il existe une faute de frappe dans 'setBackgroundcolor'. – Svante

+0

Il n'y a pas de méthode nommée 'setBackgroundColor' sur' JPanel' de toute façon :-) – SingleShot

Répondre

4

Vous ne pouvez pas placer un composant à l'intérieur d'un Image. Qu'est-ce que vous voulez faire est de peindre le Image sur l'arrière-plan d'un composant swing (comme JPanel). Tous les composants de swing ont une méthode paint() qui appelle ces trois méthodes (peut-être pas tout à fait cet ordre): paintComponent(), paintChildren(), paintBorder(). Ainsi, vous voulez remplacer la méthode paintComponent() pour peindre votre image d'arrière-plan sur le panneau. Lorsque cela fonctionne, votre méthode personnalisée sera appelée, puis la méthode paintChildren() sera appelée, qui peindront tous les composants « enfant » sur le dessus de l'image d'arrière-plan:

class BackgroundImagePanel extends JPanel { 

    public void setBackgroundImage(Image backgroundImage) { 
     this.backgroundImage = backgroundImage; 
    } 

    @Override 
    protected void paintComponent(Graphics graphics) { 
     super.paintComponent(graphics); 
     graphics.drawImage(backgroundImage, 0, 0, this); 
    } 

    private Image backgroundImage; 
} 

BackgroundImagePanel panel = new BackgroundImagePanel(); 
panel.setBackgroundImage(image); 
panel.add(new JTextField("Enter text here...")); 
panel.add(new JButton("Press Me")); 
+0

hum, désolé si mon code est une telle poubelle. J'ai un code plus long qui fonctionne (pas celui en haut). Mais j'ai vraiment besoin de placer le panneau sur le dessus de l'image, car à partir de là, je placerai des composants swing ... Tout simplement, je veux une image comme arrière-plan, un panneau invisible sur le dessus et des composants pivotants. : | – annaoj

+0

OK, compris. J'ai édité ma réponse pour être plus descriptif. – SingleShot

0

La solution « BackgroundImagePanel » peint la image à sa taille réelle. Si c'est une exigence, vous pouvez simplement utiliser un JLabel au lieu de créer un composant personnalisé. L'entrée BackgroundPanel montre comment vous pouvez faire cela. Il fournit également un panneau d'arrière-plan avec des solutions de peinture d'image plus personnalisées, qui vous permettront de redimensionner et de coller l'image, si cela fait partie de vos besoins.

Questions connexes