IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Probleme image de fond JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 15
    Points
    15
    Par défaut Probleme image de fond JPanel
    Salut
    J'espère que c'est le bon endroit pour poster mon problème.
    Alors je met une image dans le fond d'un JPane lorsque je déclare mon JPanel dans ma méthode fenetre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public class FenetreConquest extends JFrame{
    //...
    Protected JPanel PTotalSimul;
    //...
     
    public Fenetre(){
    //...
    PTotalSimul=new JPanel(){
     	   		public void paintComponent(Graphics g) {
     	   			try {Image image =Toolkit.getDefaultToolkit().getImage("Image/galaxie.jpg");
     	   				 super.paintComponent(g);
     	   				 g.drawImage(image, 0, 0, PTotalSimul.getWidth(), PTotalSimul.getHeight(), null);
     	   				}catch (Exception e) {
     	   				 e.printStackTrace();
     	   				 }
     	   		}
     	   	};
    //...
    }
    Ensuite grace à un actionListener lorsque je choisie par exemple l'option simulation il doit me charger la fenetre avec le JPanel PTotalSimul dedans.
    Logiquement il devrais m'afficher mon image dans le fond mais il ne le fais pas.
    Il faut que je reclique sur l'option simulation pour qu'il me l'affiche.
    Meme en rafraichissant le panel et la fenetre dans mon ActionListener
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class ProducNivListener implements ActionListener{
    		public void actionPerformed(ActionEvent e){
    			if(e.getSource().equals(simulProducNiv))
                                    //...
    				fenetrePrin.setLayout(null);
    				fenetrePrin.add(PTotalSimul);
    PTotalSimul.setBounds(0,0,fenetrePrin.getWidth(),fenetrePrin.getHeight());
    				PTotalSimul.revalidate();
                                    fenetrePrin.repaint();
    }
    }
    simulProducNiv-->c'est le JMenuItem qui permet de charger le PTotalSimul dans ma fenetrePrin.
    Alors j'aimerais quelle s'affiche du 1er coup mon image dans le fond.
    Si quelqu'un à une piste qu'il me la dise. Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ...
    try {
      Image image =Toolkit.getDefaultToolkit().getImage("Image/galaxie.jpg");
      super.paintComponent(g);
       g.drawImage(image, 0, 0, PTotalSimul.getWidth(), PTotalSimul.getHeight(), null);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
    ...
    Une premiere remarque, avant de commencer : la methode paintComponent est un tres mauvais endroit pour creer ton image. Il vaut mieux par exemple faire une classe SimulPanel avec une methode d'init.

    Maintenant, ton probleme. Que se passe-t-il lorsque la ligne suivante est executée la première fois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image image =Toolkit.getDefaultToolkit().getImage("Image/galaxie.jpg");
    Tu crée un objet qui représente l'image, associé au fichier Image/galaxie.jpg. Mais l'image n'est pas décompressée. Elle n'a pas de représentation en mémoire, mais simplement la liste des informations nécessaires pour le faire.

    Lorsque la ligne suivante s'execute la première fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.drawImage(image, 0, 0, PTotalSimul.getWidth(), PTotalSimul.getHeight(), null);
    L'image n'étant pas décompressée, la methode demarre la decompression, et retourne de suite (cf la javadoc), et donc n'affiche rien.
    Lorsque plus tard tu repasses par cette methode, l'image est décompressée, et donc drawImage t'affiche l'image.

    Pour le resoudre, tu peux :
    1. mettre ton composant en temps qu'observer en le passant en parametre de la methode drawImage(). Un java.awt.Component est par defaut un ImageObserver, qui lorsque l'image est completement chargée appelle repaint().
    le code devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.drawImage(image, 0, 0, PTotalSimul.getWidth(), PTotalSimul.getHeight(), this);
    2. Faire la decompression avant, dans la methode d'init par exemple. Soit en utilisant un java.awt.MediaTracker. Soit via javax.imageio.ImageIO.read();

    Enfin, si ton image est opaque, et recouvre entièrement ton panel, pas besoin de faire de super.paintComponent().

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup Sanguko.
    Cette réponse est parfaite,explication,raisonnement,résolution.
    Et en plus si on compte la rapidité.
    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème image de fond JPanel
    Par lotto90 dans le forum Composants
    Réponses: 8
    Dernier message: 10/08/2012, 10h34
  2. Probleme reaffichage image de fond
    Par Bobator dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 29/04/2007, 20h09
  3. Image en fond d'un JPanel
    Par Aurel_ dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 15/04/2007, 21h27
  4. mettre une image en fond de JPanel
    Par Le fut dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 23/02/2007, 18h01
  5. Probleme d'image de fond sur un <li>
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 30/01/2007, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo