Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage d'images dans un JPanel

    25 juin 2009 à 23:47:35

    Bonjour, voilà dans mon programme je veux afficher une image de fond dans un JPanel. Mais cette image ne s'affiche quand minuscule et quand je clique sur agrandir elle s'affiche en grand (bonne dimension). Pourquoi ne s'affiche t-elle pas directement en taille normale ?

    La classe du JPanel :

    /*--------------------------------------------------------------------------------------------------------------------|
     |                                                        JPlateau.java                                                 |
     |                                                                                                                    |
     |                                                      créé par wanghao10                                            |
     |                                                                                                                    |
     |--------------------------------------------------------------------------------------------------------------------|
     */
    import javax.swing.*;
    import java.awt.*;
    
    public class JPlateau extends JPanel{ // Classe qui représente le plateau de jeu
        
        private Image imageFond ; // image de fond(
        
        public JPlateau() { // Constructeur
    
            imageFond = Toolkit.getDefaultToolkit().getImage("images/imageFond.png"); // image de fond
        }
        
        public void paintComponent(Graphics g){ // méthode qui dessine une image
                 
            g.drawImage(imageFond, 0, 0, this.getWidth(), this.getHeight(), null); // on dessine une image
            repaint(); // on repeint
        }
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      26 juin 2009 à 0:27:02

      Tu devrais plutot repeindre ta Frame
      import javax.swing.*;
      import java.awt.*;
      
      public class JPlateau extends JPanel{ // Classe qui représente le plateau de jeu
          
          private Image imageFond ; // image de fond(
          
          public JPlateau() { // Constructeur
      
              imageFond = Toolkit.getDefaultToolkit().getImage("image.jpg"); // image de fond
          }
          
          public void paintComponent(Graphics g){ // méthode qui dessine une image
                   
              g.drawImage(imageFond, 0, 0, this.getWidth(), this.getHeight(), this); // on dessine une image
          }
          public static void main(String[] arg)
          {
              JFrame fen=new JFrame();
      	fen.add(new JPlateau());
      	fen.setSize(300,400);
      	fen.repaint();
              fen.setVisible(true);
          }
      }
      
      • Partager sur Facebook
      • Partager sur Twitter
      J'ai tous les badges d'OpenClassrooms.
        26 juin 2009 à 16:39:12

        Non ça ne marche toujours pas.

        Je remets le code de mon panel :

        /*--------------------------------------------------------------------------------------------------------------------|
         |                                                        JPlateau.java                                                 |
         |                                                                                                                    |
         |                                                      créé par wanghao10                                            |
         |                                                                                                                    |
         |--------------------------------------------------------------------------------------------------------------------|
         */
        import javax.swing.*;
        import java.awt.*;
        
        public class JPlateau extends JPanel{ // Classe qui représente le plateau de jeu
            
            String imageFond; // image de fond
            
            public JPlateau() { // Constructeur
                
                this.imageFond = "images/imageFond.png"; // image de fond
            }
            
            public void paintComponent(Graphics g){
                
               g.drawImage(new ImageIcon(Toolkit.getDefaultToolkit().getImage(imageFond)).getImage(), 0, 0,
                       this.getWidth(), this.getHeight(), null);
            }
        }
        


        Quand le programme apparaît on voit ceci : (l'image est toute petite)

        Image utilisateur

        et quand on agrandit, elle devient comme ça :

        Image utilisateur

        et c'est comme ceci que je voudrais que ça soit quand le programme démarre

        • Partager sur Facebook
        • Partager sur Twitter
          26 juin 2009 à 17:05:06

          Montre le code avec lequel tu lance ta frame
          • Partager sur Facebook
          • Partager sur Twitter
          J'ai tous les badges d'OpenClassrooms.
            26 juin 2009 à 17:13:01

            /*--------------------------------------------------------------------------------------------------------------------|
             |                                                       JConanProof.java                                                 |
             |                                                                                                                    |
             |                                                      créé par wanghao10                                            |
             |                                                                                                                    |
             |--------------------------------------------------------------------------------------------------------------------|
             */
            /* Principes du jeu : On controle un personnage, conan, qui doit ramasser toutes les preuves d'un assassinat et
             doit les ramener à Kogoro, le père de sa petite amie Ran.
             Les preuves sont par exemple des couteaux, des cordes...etc.
             */
            
            import javax.swing.*;
            import java.awt.*;
            
            public class JConanProof extends JFrame{ // Classe principale
                
                // objets de l'interface graphique
                
                JPlateau plateau = new JPlateau(); // plateau de jeu
                
                public JConanProof(String titre) { // Constructeur
                    
                    this.setTitle(titre); // on construit une fenêtre avec un titre indiqué
                    this.getContentPane().add(plateau); // on ajoute le plateau
                    this.setVisible(true); // la fenêtre est visible  
                    this.pack(); // mise à jour des panels
                }
                
                public static void main(String args[]){ // méthode principale
            
                    try{
              	     UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
              	     
                         JConanProof jeu = new JConanProof("Conan Proof"); // on créé une instance de l'objet
                         jeu.setSize(1100, 768); // on redimensionne la fenêtre
                         jeu.setLocationRelativeTo(jeu.getParent()); // on centre la fenêtre
            	}
              	     catch (Exception e){}
                }
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              26 juin 2009 à 17:18:15

              Il ne devrait pas y avoir
              super.paintComponent(g);
              
              au début de la fonction surchargée ?
              Sinon essaye une autre fonction drawimage qui prend en plus les dimensions de la fenêtre pour l'afficher entièrement quelle que soit sa taille.
              http://slick.cokeandcode.com/javadoc/o [...] oat,%20float)
              (bizarre ce lien !)
              • Partager sur Facebook
              • Partager sur Twitter
              Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
                26 juin 2009 à 18:58:04

                Je ne comprends pas trop l'anglais mais si j'ai bien compris les paramètres ce sont :

                -image bon ça c'est pas compliqué,
                - x = ça je sais,
                - y : ça aussi,
                - srcx : position des ordonnées de la fenêtre,
                - srcy : pareil pour les abscisses,

                et après je comprend pa trop
                • Partager sur Facebook
                • Partager sur Twitter
                  26 juin 2009 à 19:36:58

                  Tu as déjà eu la solution, il suffisait de rajouter le repaint sur ta frame (après ajout).
                  Voila la preuve:
                  Image utilisateur

                  Et le code:

                  import javax.swing.*;
                  import java.awt.*;
                  
                  class JPlateau extends JPanel{ // Classe qui représente le plateau de jeu
                      
                      private Image imageFond ; // image de fond(
                      
                      public JPlateau() { // Constructeur
                  
                          imageFond = Toolkit.getDefaultToolkit().getImage("detective_conan_1.jpg"); // image de fond
                      }
                      
                      public void paintComponent(Graphics g){ // méthode qui dessine une image
                               
                          g.drawImage(imageFond, 0, 0, this.getWidth(), this.getHeight(), this); // on dessine une image
                      }
                      /*public static void main(String[] arg)
                      {
                          System.out.println("debut");
                  		JFrame fen=new JFrame();
                  		fen.add(new JPlateau());
                  		fen.repaint();
                  		fen.setSize(300,400);
                          fen.setVisible(true);
                          System.out.println("fin");
                      }*/
                  }
                  
                  
                  public class JConanProof extends JFrame{ // Classe principale
                      
                      // objets de l'interface graphique
                      
                      JPlateau plateau = new JPlateau(); // plateau de jeu
                      
                      public JConanProof(String titre) { // Constructeur
                          
                          this.setTitle(titre); // on construit une fenêtre avec un titre indiqué
                          this.getContentPane().add(plateau); // on ajoute le plateau
                          this.setVisible(true); // la fenêtre est visible  
                  	  this.repaint();
                          this.pack(); // mise à jour des panels
                      }
                      
                      public static void main(String args[]){ // méthode principale
                  
                          try{
                    	     UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
                    	     
                               JConanProof jeu = new JConanProof("Conan Proof"); // on créé une instance de l'objet
                               jeu.setSize(1100, 768); // on redimensionne la fenêtre
                               jeu.setLocationRelativeTo(jeu.getParent()); // on centre la fenêtre
                  	}
                    	     catch (Exception e){}
                      }
                  }
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                  J'ai tous les badges d'OpenClassrooms.
                    26 juin 2009 à 19:48:27

                    Moi avec le repaint() après le setVisible(true) ça marche pas et pourtant j'ai même copier coller ton code en changeant bien sur le chemin de l'image
                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 juin 2009 à 19:55:34

                      Alors, redimensionne ta fenêtre après l'affichage (juste de 1px), sa contournera le problème ;) .
                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 juin 2009 à 19:59:36

                        ça ne marche pas.

                        J'ai mis le redimensionnement dans la méthode main parce que sinon ça ne redimensionne pas la fenêtre (si je le mets dans le constructeur)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          26 juin 2009 à 21:10:20

                          Si tu initialise la taille de ton JPanel avec this.setPreferredSize(new Dimension(largeur,hauteur)), et que tu adapte la taille de la fenêtre à celle du JPanel avec this.pack(), ça devrait marcher.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Affichage d'images dans un JPanel

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown