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 :

Problème avec image dans JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Points : 14
    Points
    14
    Par défaut Problème avec image dans JPanel
    Bonjour à tous !

    J'ai un problème assez gênant.
    Pour l'instant, je travaille sur un moteur de recherche avancé d'images qui utilise les OrdImage d'Oracle.

    J'ai un soucis quand je veux afficher une image dans un panel.

    D'une part, celle-ci ne s'affiche que lorsque je lance ma méthode d'affichage pour la deuxième fois (et non la première) et d'autre part si cette méthode n'est pas lancée par un CLIC sur un bouton, l'image ne s'affiche que pendant une fraction de seconde puis disparaît.

    Pour le premier problème, j'ai contourné en effectuant une boucle à 2 itérations, mais pour l'autre je ne sais pas quoi faire.

    Voila comment je m'y prends pour afficher une image dans un panel.
    imgpreview est mon panel. "img.jpeg" est le fichier qui contient mon image à afficher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Image Ima=imgpreview.getToolkit().getImage("img.jpeg");
              java.awt.Graphics g=imgpreview.getGraphics();
              imgpreview.paint(g);
              g.drawImage(Ima,0,0,200,240,this.imgpreview);
    Comment empêcher que l'image ne disparaisse ?
    Je ne sais pas quoi faire.

    Merci d'avance pour vos réponses.
    Images attachées Images attachées  

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Deux choses à faire:

    • Déja charger l'image au moyen de ImageIO.read() au lieu de Toolki.getToolkit ...
    • Pour afficher l'imgae dans ton panel redéfinir sa méthode paintComponent(Graphics g) dans laquelle tu dessinera ton image avec le avec un draw sur le Graphics passé en paramètre
    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.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    merci, je vais essayer ça et je vous tiens au courant.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Bon déja le problème des 2 fois est résolu avec ImageIO.read

    merci

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Tu pourrais être plus précis en ce qui concerne la redéfinition de paintComponent ? Je suis encore débutant en java.

    On dirait que cette fonction est appelée à la création de la classe.

  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 : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Elle est appelée à chaque moment ou le JPanel doit se redessiner (création, affichage et tt le toutim) en fait tu ne l'appelle jamais directement de toi même

    Grosso merdo dans ton cas ça donnera quelquechose dans ce genre:

    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
     
    public class MonPanel extends JPanel {
     
      private BufferedImage image;
      public MonPanel( String cheminImage ) {
        super();
        image = ImageIO.read(getClass().getRessourceAsStream(cheminImage));
      }
     
      protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(0,0,this.getWidth(),this.getHeight());
      }
    .....
    }
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Ca y est ça marche !!!!

    J'ai perdu un temps monstrueux car j'avais oublié 2 paramètres à DrawImage.

  8. #8
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    Qu'est il mieux d'utiliser lorsqu'on veut superposer un gridLayout de boutons transparents sur un panel contenant une image ... ?

    Je n'ai aucun mal à afficher un gridPanel de bouton, mais quand j'essaie de placer l'image , j'obtiens un affichage tout à fait fantaisiste.

    ex: au lancement du programme, mon panel est vide.

    le fait de passer la souris au dessus du panel censé contenir le gridLayout de boutons fait apparaitre chaque bouton du grid un à un ... Mais toujours pas d'image.

    J'ai essaye avec un imageTracker, etle probleme s'est deplacé dans le sens ou j'obtiens alors 2 fenetres (1Frame et une JFrame) ... Ce qui n'est pas vraiment l'effet voulu, vu que je cherche à superposer deux elements...
    24 hours a day ... never enough

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

Discussions similaires

  1. problème avec images dans la base de données
    Par zidane2 dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 04/08/2010, 11h54
  2. [SWT] Problème avec images dans Table
    Par dalma dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 06/11/2009, 16h25
  3. Problème avec GridBagLayout dans JPanel
    Par caneman dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 19/12/2006, 22h32
  4. Problème avec l'insertion d'une image dans JPanel
    Par anutka dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 16/03/2006, 10h02
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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