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 :

Swing et Images


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de NiHiL
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Par défaut Swing et Images
    Bonjour,

    j'essaye de créer mon premier programme java qui n'aura aucun intérêt mais je bloque sur l'insertion d'une image dans un JPanel.

    Voici mon code :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    import javax.swing.*;
    import java.awt.*;
     
    public class popupinfo extends JFrame 
    {	
    	private JPanel zone;
    	private JPanel zoneimg;
    	private JLabel message;
    	private ImageIcon image;
     
    	public popupinfo(String nomFenetre, int x, int y) 
    	{
    		// Appelle du constructeur
    		super(nomFenetre);
    		setSize(x, y);
     
    		// Placement de la fenetre
    		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    	        setLocation(dim.width/2 - getWidth()/2, dim.height/2 - getHeight()/2);
     
    		// Caractéristiques
    		zone = new JPanel();
    		getContentPane().add(zone);
     
    		// Message
    		message = new JLabel("Programme développé par Sylvain R.");
    		message.setHorizontalAlignment(JTextField.CENTER);
    		message.setVerticalAlignment(JTextField.CENTER);
    		message.setSize(zone.getWidth(), zone.getHeight());
     
    		// Image
    		ImageIcon image = new ImageIcon("elin.jpg");
    		zoneimg.getGraphics().drawImage(image.getImage(), 0, 0, zoneimg);
     
    		// Définition des objets utilisés
    		GridBagLayout placeur 			= new GridBagLayout();
    		GridBagConstraints contraintes 	= new GridBagConstraints();
    		getContentPane().setLayout(placeur);
    		contraintes.fill 		= GridBagConstraints.BOTH;
    		contraintes.insets 		= new Insets(1, 1, 1, 1);
     
    		// placement du composant du message
    		contraintes.gridx 		= 1; contraintes.gridy 		= 1;
    		contraintes.gridwidth 	= 1; contraintes.gridheight = 1;
    		contraintes.weightx 	= 1; contraintes.weighty 	= 1;
     
    		placeur.setConstraints(message, contraintes);
    		getContentPane().add(message);
     
    		//placement de l'image
    		contraintes.gridx 		= 0; contraintes.gridy 		= 0;
    		contraintes.gridwidth 	= 1; contraintes.gridheight = 1;
    		contraintes.weightx 	= 1; contraintes.weighty 	= 1;
     
    		placeur.setConstraints(zoneimg, contraintes);
    		getContentPane().add(zoneimg);
     
    		 // Rendre la fenetre visible
    		 setVisible(true);
    	}
     
    }
    Ca compile et tous mais quand cette fenetre est censée s'ouvrir il ne se passe rien et eclipse me sort tout un tas d'erreurs :

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at popupinfo.<init>(popupinfo.java:33)
    at fenetre$1.actionPerformed(fenetre.java:113)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Ce que je ne comprends pas c'est que le fichier "elin.jpg" est bien présent dans le meme repertoire que le .class qui contient la méthode main.

    Un petit coup de main serait le bien venu.

    Merci.

  2. #2
    Membre expérimenté Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Par défaut
    Je crois qu'il faudrait que tu t'intéresse au déboggeur d'Eclipse, qui te permettrait de voir d'où proviennent tes erreurs...

    Mais bon, en lisant le code, je ne vois nulle part que tu instancies zoneimg. Alors que tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    zoneimg.getGraphics().drawImage(image.getImage(), 0, 0, zoneimg);
    Si tu n'a pas fais de new quelquechose, zoneimg n'existe pas et tu ne peux récupérer son graphics.
    Du reste, l'ideal serait de créer une classe JZoneImg extends JPanel et de surcharger la méthode paintComponent() en dessinant ton image !!

  3. #3
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    Vu que tu utilises une ImageIcon, le plus simple est de l'ajouter à ton contentPane de la même manière que le JLabel, et d'enlever la ligne qu'a cité dazz_x.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  4. #4
    Membre éprouvé Avatar de BlackWood
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Par défaut
    Salut,

    Petite astuce au passage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Placement de la fenetre
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    setLocation(dim.width/2 - getWidth()/2, dim.height/2 - getHeight()/2);
    peut être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setLocationRelativeTo(null);
    depuis Java 1.4

    Intéresse-toi au deboggueur d'Eclipse, mais aussi aux Exception en Java, souvent trés "parlantes" :

    Première ligne :
    NullPointerException : Un Object a comme valeur "null", valeur par défaut des Object non instancié.
    popupinfo.java:33 : Le numéro de ligne qui a lancé l'Exception (33). Je pense qu'elle correspond à la ligne zoneimg.getGraphic()...
    Conclusion : zoneimg est sûrement null
    Et effectivement, il n'est créé nulle part dans ton code.

    Lignes suivantes :
    Ce ne sont pas d'autres erreurs ! Elles correspondent simplement au chemin qu'a suivi le programme pour arriver à cette erreur (par appel de méthodes). Elle sont utiles lorsque la solution n'apparait pas clairement dans la première ligne.

  5. #5
    Membre éprouvé Avatar de NiHiL
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Par défaut
    Merci pour vos réponses et astuces.

    J'ai donc rectifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Image
    ImageIcon image = new ImageIcon("elin.jpg");
    zoneimg 	= new JPanel();
    zoneimg.getGraphics().drawImage(image.getImage(), 0, 0, zoneimg);
    mais ca n'a pas changé grand chose

    Voici l'adresse d'une archive contenant tout mon code.

    Si vous pouviez y jeter un coup d'oeil ce serait sympa.

    Merci

  6. #6
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Voila j'ai fait les modifications conseillées dans les parties :
    - Plavement de la fenetre
    - Image
    - Placement de l'image

    De plus, la partie Caractéristiques ne sert à mon avis à rien, puisque
    tu ajoutes le JPanel avant de spécifier le layout et d'y associer les contraintes.
    Quand au JPanel zoneimg, je ne m'en sers pas (vu que j'utilise l'ImageIcon). Ce sont 2 solutions concurrentes, il faut en choisir une.
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    import javax.swing.*;
    import java.awt.*;
     
    public class popupinfo extends JFrame 
    {    
        private JPanel zone;
        private JPanel zoneimg;
        private JLabel message;
        private ImageIcon image;
     
        public popupinfo(String nomFenetre, int x, int y) 
        {
            // Appelle du constructeur
            super(nomFenetre);
            setSize(x, y);
            
            // Placement de la fenetre
            this.setLocationRelativeTo(null);
    
            // Caractéristiques
            zone = new JPanel();
            getContentPane().add(zone);
            
            // Message
            message = new JLabel("Programme développé par Sylvain R.");
            message.setHorizontalAlignment(JTextField.CENTER);
            message.setVerticalAlignment(JTextField.CENTER);
            message.setSize(zone.getWidth(), zone.getHeight());
            
            // Image
            ImageIcon image = new ImageIcon("elin.jpg");
            
            // Définition des objets utilisés
            GridBagLayout placeur             = new GridBagLayout();
            GridBagConstraints contraintes     = new GridBagConstraints();
            getContentPane().setLayout(placeur);
            contraintes.fill         = GridBagConstraints.BOTH;
            contraintes.insets         = new Insets(1, 1, 1, 1);
        
            // placement du composant du message
            contraintes.gridx         = 1; contraintes.gridy         = 1;
            contraintes.gridwidth     = 1; contraintes.gridheight = 1;
            contraintes.weightx     = 1; contraintes.weighty     = 1;
            
            placeur.setConstraints(message, contraintes);
            getContentPane().add(message);
            
            //placement de l'image
            contraintes.gridx     = 0; contraintes.gridy         = 0;
            contraintes.gridwidth     = 1; contraintes.gridheight = 1;
            contraintes.weightx     = 1; contraintes.weighty     = 1;
            
            placeur.setConstraints(image, contraintes);
            getContentPane().add(image);
         
             // Rendre la fenetre visible
             setVisible(true);
        }
        
    }
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  7. #7
    Membre éprouvé Avatar de NiHiL
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Par défaut
    C'est sympa d'avoir essayé mais ca ne marche pas non plus.
    J'ai copié collé ton code et eclipse me dit qu'il y a 2 erreurs :

    La méthode add(Component) du type Container ne s'applique pas aux arguments (ImageIcon) mainzob popupinfo.java ligne 54 1161289030098 711

    La méthode setConstraints(Component, GridBagConstraints) du type GridBagLayout ne s'applique pas aux arguments (ImageIcon, GridBagConstraints) mainzob popupinfo.java ligne 53 1161289030098 710
    J'ai essayé de compiler et executer malgrès ca mais ca ne marche pas

  8. #8
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    JLabel.setIcon(monIcone);

  9. #9
    Membre éprouvé Avatar de NiHiL
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Par défaut
    Merci, avec un JLabel ca marche du feu de dieu quand j'execute avec eclipse mais elle ne s'affiche pas quand j'exporte le tout en .jar.

    De plus j'ai un petit carré gris clair qui s'affiche au milieu de mon image.
    Il vient d'où ?

  10. #10
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par iohack
    JLabel.setIcon(monIcone);
    Ce truc je l'utilise une fois par an et je me fais avoir à chaque fois. Oui il faut passer par un JLabel.

    Pour l'exportation en jar, il faut passer par une méthode différente pour charger l'image (je suppose qu'elle est exportée dans le jar en même temps que le reste). cf FAQ.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  11. #11
    Membre éprouvé Avatar de NiHiL
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Par défaut
    Merci ca marche niquel.

    Et une idée de la provenance de ces carrés gris clairs ?

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

Discussions similaires

  1. [swing][image] transparence
    Par harold63 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 23/12/2015, 18h26
  2. swing et images
    Par kespy13 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 01/04/2007, 21h20
  3. [swing][Buffered Image] memoire et lenteur sont les deux ...
    Par pierre.zelb dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 17/08/2005, 09h38
  4. [Swing] récupérer une image d'un composant
    Par klemouf dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 16/09/2004, 10h24
  5. Afficher une image avec swing
    Par arnonote dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 07/08/2004, 12h10

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