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

2D Java Discussion :

Affichage d'une image


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Ndugu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 121
    Par défaut Affichage d'une image
    Bonjour à tous,

    je suis débutant en java et je m'excuse d'avance pour ce post...

    Cela fait deux jour que je tente d'afficher une image sur une fenêtre, mais malgré mais recherche sur la fac et les forums, je ne comprend pas pourquoi mon image ne s'affiche pas!?

    La fenêtre s'ouvre mais l'image ne s'affiche pas.

    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
    package essai;
    
    import javax.swing.JFrame;
    
    import java.awt.Image;
    import java.awt.Graphics;
    
    public class CircleFrame extends JFrame  {
    
    	private Image Img;
    	
    	/**  Le constructeur de la classe CircleFrame */
    	public CircleFrame() {
    		
    		this.setVisible(true);
    		this.setSize(800,500);
    
    		/** Accès au toolkit : */
    		java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
    		/** lecture de l'image : */
    		Img = toolkit.getImage("foot.gif");
    	}
    	
    	/**	Point d'entree de notre programme. */
    	public static void main (String[] args){
    		/*instanciation classe*/
    		CircleFrame cF = new CircleFrame();
    		cF.repaint();
    	} 
    	
    	public void paint(Graphics g) {
    		// Affichage d'une image	
    		g.drawImage(Img,100,100,null);
    	}
    	
    }
    Précision : j'ai mis l'image "foot.gif" dans le dossier où se trouve la classe.

    Merci d'avance à celui ou celle qui pourra m'expliquer ce que je fais mal...

  2. #2
    Membre éclairé Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Par défaut
    essaye d'overwrite la methode repaint
    et pense a dire a ton composant de se repeindre justement
    this.repaint();

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    L'image ne doit pas être dessinnée sur la JFrame mais sur un JPanel(ou JComponent) que tu placera en tant que contentPane de ta JFrame

    Cf FAQ: http://java.developpez.com/faq/gui/?...E_fond_fenetre

  4. #4
    Membre éclairé Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Par défaut
    Je sentais que c'était pas propre mais quel est l'inconvénient de repeindre directement le composant ?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Tout simplement car la méthode paint de la JFrame est héritée du Container AWT. Or celui ci ne se prête pas du tout au dessin (la seule classe se prêtant au dessin dans AWT étant la classe Canvas)

  6. #6
    Membre confirmé Avatar de Ndugu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 121
    Par défaut
    Merci pour la rapidité de vos réponses, je vais essayer tout ca...

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 905
    Billets dans le blog
    54
    Par défaut
    Pour des questions de modularisation et de reutilisabilite de code egalement. Tu auras probablement plus souvent besoin d'un JPanel affichant une image que d'une JFrame. Or avoir le premier, permet de facilement faire le second d'une maniere plus "Swing-like" avec setContentPane().

    Note que la surcharge de paint() fonctionne cependant et c'est d'ailleurs une bonne maniere de faire des ecrans de demarrage/chargement avec des surcharge de JWindow par exemple (la methode pour avoir des splashscreens n'existant que depuis Java 6 et n'etant en fait pas terrible a l'usage).

    Sinon ton probleme vient peut-etre de l'usage de Toolkit pour charger l'image. En effet Toolkit charge des images de maniere asynchrone (une image vide est retournee, une notification est lancee via le mecanisme de l'ImageObserver lorsqu'elle est chargee permettant de forcer un repaint()). Ainsi ton image n'est peut-etre pas chargee (voir meme peut-etre pas trouvee par le programme) au moment ou la fenetre s'affiche.

    Pour charger de maniere synchrone (ca bloque tant que l'image n'est pas entierement chargee), tu peux utiliser ImageIO ou une ImageIcon. Cela te permettra egalement de voir si ton image est trouvee par ton application.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. [Tomcat] Affichage d'une image
    Par david71 dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 15/02/2005, 11h37
  2. Réponses: 2
    Dernier message: 27/12/2004, 09h23
  3. Pbs d'affichage d'une image sur un panel
    Par ysr1 dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/09/2004, 09h55
  4. [FLASH MX] Qualité d'affichage d'une image
    Par n_tony dans le forum Flash
    Réponses: 3
    Dernier message: 16/08/2004, 09h44
  5. Affichage d'une image sous linux
    Par Braim dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 25/03/2003, 10h41

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