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

Interfaces Graphiques en Java Discussion :

Pb Chargement image - AbstractAction


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 84
    Points : 42
    Points
    42
    Par défaut Pb Chargement image - AbstractAction
    Bonjour,

    Malgré mes nombreuses recherche je ne trouve pas d'ou viens le problème du chargement des images sur un toolsbar.

    Les chemins d'accès des images sont corrects. Toutefois les attributs "width" et "heigth" de l'image sont à 0.

    voici le code (TestActions.java):
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    /**
     * 
     */
    package com.complex.ui;
     
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
     
    import javax.swing.AbstractAction;
    import javax.swing.ImageIcon;
    import javax.swing.JMenu;
    import javax.swing.JToolBar;
    import javax.swing.KeyStroke;
     
    /**
     * @author Sébastien Serpaud
     *
     */
    public class TestActions {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 18862990943464100L;
     
    	private DemoAction action[];
     
    	/**
             * 
             */
    	@SuppressWarnings("serial")
    	public TestActions() {
     
    		action = new DemoAction[6];
     
    		action[0] = new DemoAction("Plot Magnitude", 'M', 
    				createImageIcon("com/complex/lib/icons/magnitude.ico"));
    		action[1] = new DemoAction("Plot Magnitude in dB", 'B', 
    				createImageIcon("com/complex/lib/icons/db.ico"));
    		action[2] = new DemoAction("Plot Phase", 'P', 
    				createImageIcon("com/complex/lib/icons/phase.ico"));
    		action[3] = new DemoAction("Plot Phase in degree", 'D', 
    				createImageIcon("com/complex/lib/icons/phasedegree.ico"));
    		action[4] = new DemoAction("Plot Real Part", 'R', 
    				createImageIcon("com/complex/lib/icons/re.ico"));
    		action[5] = new DemoAction("Plot Imaginary Part", 'I', 
    				createImageIcon("com/complex/lib/icons/im.ico"));
    	}
     
    	public void initMenu(JMenu menu) {
    		for (int i = 0; i < action.length; i++)
    			menu.add(action[i]);
    	}
     
    	public void initToolBar(JToolBar toolBar) {
    		for (int i = 0; i < action.length; i++)
    			toolBar.add(action[i]);
    	}
     
    	private ImageIcon createImageIcon(String path) {
            java.net.URL imgURL = this.getClass().getClassLoader().getResource(path);
            if (imgURL != null) {
                return new ImageIcon(imgURL);
            } else {
                System.err.println(this.getClass().getName() + " : fichier non trouve : " + path);
                return null;
            }
        }
     
    	private class DemoAction extends AbstractAction {
    		/**
                     * 
                     */
    		private static final long serialVersionUID = -8785245616631770805L;
     
    		public DemoAction(String text, char shortcutKey, ImageIcon icon) {
    			super(text, icon);
    			putValue(SHORT_DESCRIPTION, text);
    			putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(shortcutKey,
    					Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
    		}
     
    		public void actionPerformed(ActionEvent a) {
    			String name = (String) getValue(NAME);
     
    			System.out.println(name);
    		}
    	}
    }
    et le program test (Test.java):
    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
    63
    64
    65
    66
    67
    68
     
    /**
     * 
     */
    package com.complex.ui;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.HeadlessException;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
     
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JToolBar;
     
    /**
     * @author Sébastien Serpaud
     *
     */
    public class Test extends JFrame {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = -6041236038996063149L;
     
    	/**
             * @throws HeadlessException
             */
    	public Test()  {
    		super("Test Actions");
    		this.setPreferredSize(new Dimension(600, 480));
     
    		this.setJMenuBar(new JMenuBar());
     
    		TestActions formatActions = new TestActions();
     
    		JMenu menu = new JMenu("Format");
    		formatActions.initMenu(menu);
    		this.getJMenuBar().add(menu);
     
    		JToolBar toolBar = new JToolBar("Format");
    		formatActions.initToolBar(toolBar);
    		this.getContentPane().add(toolBar, BorderLayout.NORTH);
     
     
    		this.addWindowListener(new WindowAdapter() {
    			public void windowClosing(WindowEvent evt) {
    				System.exit(0);
    			}
    		});
    		this.pack();
    		this.setVisible(true);
    	}
     
    	/********************************************************************************************* */
     
    	/**
             * Main class
             * 
             * @param args
             */
    	public static void main(String[] args) {
    		new Test();
    	}
    }
    Merci d'avance pour toute l'aide que vous pourriez m'apporter.

    Séb.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par <_oodTi96Tiboo_> Voir le message
    Les chemins d'accès des images sont corrects. Toutefois les attributs "width" et "heigth" de l'image sont à 0.
    Où teste tu ces attributs? Est-ce le seul problème ou as-tu aussi des problèmes d'affichage?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 84
    Points : 42
    Points
    42
    Par défaut
    Non je n'ai aucun pb d'affichage.

    Je travaille sous eclipse.
    j'ai donc fait un watch de la variable "imgURL" dans la méthode "createImageIcon". Je retrouve bien le chemin complet de mon image.

    Toutefois lorsque je regarde les attributs "width" et "heigth" de l'objet "icon" dans le constructeur de la class "DemoAction", ils sont = à -1 (pas 0 comme dit précédemment).

    J'ai impression que l'image n'est pas chargée. je pense que le problème se trouve dans la méthode "createImageIcon". Malgré que j'ai aucune levée d'erreur, l'image n'est pas chargée.

    Je ne comprend pas pourquoi cela ne fonctionne pas chez moi. En cherchant sur le web, je vois le même code partout...

    comment fait vous pour charger une image de votre coté?

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par <_oodTi96Tiboo_> Voir le message
    Non je n'ai aucun pb d'affichage.
    Donc elle est bien chargée. Les images de l'interface garphique sont chargée de manière asynchrone. C'est pour ca que les valeur width / height ne sont pas disponibles immédiatement.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 84
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Donc elle est bien chargée. Les images de l'interface garphique sont chargée de manière asynchrone. C'est pour ca que les valeur width / height ne sont pas disponibles immédiatement.
    Tout à fait.
    Mais pourquoi même avec une longue tempo entre la création de l'image ou l'utilisation de la class MediaTracker j'ai toujours pas d'image? (j'ai lu en plus que l'utilisation de cette class n'était pas nécessaire, on pouvait s'en passer).

    Je sèche vraiment sur cette question de chargement d'image. Sur le Net je trouve toujours les même codes mais qui fonctionnent pas chez moi.

    comment fait vous de votre coté pour charger une image?

    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
     private ImageIcon createImageIcon(String path,
                                                   String description) {
     
        	// load image before display
        	MediaTracker mTrack = new MediaTracker(this); 
            //URL imgURL = this.getClass().getClassLoader().getResource(path);
        	URL imgURL = this.getClass().getClassLoader().getResource(path);
     
            if (imgURL != null) {
            	Image img = getToolkit().getImage(imgURL);
     
                mTrack.addImage(img, 0);
        		try {
    				mTrack.waitForAll();
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
        		return new ImageIcon(img, description);
     
            } else {
                System.err.println("Couldn't find file: " + path);
                return null;
            }
        }

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Utilise plutôt la classe ImageIO et sa méthode read qui est synchrone et renvoie des exceptions si l'image est incorrecte (fichiers non trouvé, fichier corrompu, fichier non image & cie).
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par <_oodTi96Tiboo_> Voir le message
    Tout à fait.
    Mais pourquoi même avec une longue tempo entre la création de l'image ou l'utilisation de la class MediaTracker j'ai toujours pas d'image?

    Je sèche vraiment sur cette question de chargement d'image. Sur le Net je trouve toujours les même codes mais qui fonctionnent pas chez moi.
    Faut savoir, tu as une image ou tu n'en a pas? Ton post précédent dit que tu n'a aucun problème d'affichage de l'image, donc tu as une image. Montre nous du code qui lit une mauvaise valeur et la valeur attendue, dans ce cas.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 84
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par sinok Voir le message
    Utilise plutôt la classe ImageIO et sa méthode read qui est synchrone et renvoie des exceptions si l'image est incorrecte (fichiers non trouvé, fichier corrompu, fichier non image & cie).
    je vais essayer avec cette class.

    tchize_ :
    non je n'ai pas de problème avec l'affichage de l'image autre qu'elle ne s'affiche pas
    quand je disais aucun pb d'affichage je parlais du reste de l'interface graphique.

    tous le code est dans le premier post.

    Quelle est votre méthode pour charger une image?

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par <_oodTi96Tiboo_> Voir le message

    Quelle est votre méthode pour charger une image?
    Je note dans ton code que tu utilise le format .ico. Il n'est pas supporté par Java. Utilise du png.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 84
    Points : 42
    Points
    42
    Par défaut
    Effectivement, java ne prend pas le .ico en charge.

    donc après vérification, mon code fonctionne très bien.

    merci pour votre aide.

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

Discussions similaires

  1. [Info] Chargement image et Java heap space
    Par dazz_x dans le forum Langage
    Réponses: 9
    Dernier message: 11/09/2007, 11h51
  2. Réponses: 2
    Dernier message: 06/02/2006, 09h34
  3. [Info]Chargement image/fichier d'un autre projet Eclipse ?
    Par TSnarfK dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 23/01/2006, 10h07
  4. [HTML] affichage / chargement image
    Par francis m dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 27/11/2005, 17h03
  5. [FLASH MX] Pb chargement image
    Par noarno dans le forum Flash
    Réponses: 8
    Dernier message: 19/08/2005, 09h46

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