lordankou | Bonjour,
J'ai un problème d'affichage d'image dans deux JPanel imbriqués.
J'ai une class PanelAvecFond qui permet d'afficher une image dans le panel
Cette classe marche très bien sauf quand elle est imbriquée dans un autre panel de type PaneAvecFond auquel cas le panel imbriqué ne s'affichera pas (idem si on rajoute un JLabel dans celui ci).
Je pense que le problème doit venir d'un paint à refaire au moment ou j'inclue mon second panel mais je suis pas sur.
Voilà le code de ma classe :
Code :
- //////////
- // library
- //////////
- import javax.swing.JComponent; // JComponent library
- import javax.swing.ImageIcon; // ImageIcon library
- import java.awt.TexturePaint; // TexturePaint library
- import java.awt.image.BufferedImage; // BufferedImage library
- import java.awt.Graphics; // graphics library
- import java.awt.Image; // image library
- import java.awt.Toolkit; // toolkit library
- import java.awt.Rectangle; // rectangle library
- import java.awt.Graphics2D; // Graphics2D library
- import java.awt.Color; // color library
- /** declaration of a JComponent which can display a background picture
- * @see : JComponnent
- * @author :
- */
- public class PanelAvecFond extends JComponent {
- ///////////////////////
- // Variable declaration
- ///////////////////////
- private TexturePaint maTexture; // texture to display
- private BufferedImage monBuffer; // Image Buffer
- //////////////////////
- // Methode declaration
- //////////////////////
- /** constructor of the JPanel with a background
- * @param : file name of the background
- * @return : void
- */
- public PanelAvecFond(String monNomDeFichier){
- this.monBuffer = this.toBufferedImage(Toolkit.getDefaultToolkit().getImage(monNomDeFichier)); // get image from a file and "stock" it to a buffer
- this.maTexture = new TexturePaint(monBuffer,new Rectangle(0, 0, monBuffer.getWidth(), monBuffer.getHeight())); // create a texte from the image buffer created juste above
- }
- /** method to display the picture
- * @param : component where we can draw
- * @return : void
- */
- public void paintComponent(Graphics g){
- Graphics2D g2d = (Graphics2D)g; // create a 2D graphics
- g2d.setPaint(maTexture); // applay texture to 2D graphics
- g2d.fillRect(0, 0, getWidth(), getHeight() ); // draw a rectangle which contain the picture
- }
-
-
- /** method to buffer an image
- * @param : picture to buffer
- * @return : Buffered picture corresponding to picture
- */
- private BufferedImage toBufferedImage(Image image){
- // create a new image
- image = new ImageIcon(image).getImage();
- // create a buffer image from the picture
- BufferedImage monBuffer = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
- // create a new graphic
- Graphics monGraphique = monBuffer.createGraphics();
- // define a color (not really useful)
- monGraphique.setColor(Color.white);
- // draw a rectangle to store the picture
- monGraphique.fillRect(0, 0, image.getWidth(null),image.getHeight(null));
- // draw a image with graphics
- monGraphique.drawImage(image, 0, 0, null);
- monGraphique.dispose();
- // Return the image buffer
- return monBuffer;
- }
-
- }
|
|