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 :

Créer une image sur une autre image


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut Créer une image sur une autre image
    Bonjour,

    Je suis actuellement sur le développement d'une petite application sous Eclipse dans le cadre de mon apprentissage. Elle se base sur le concept de GoogleMap dans le sens ou l'on a une carte sur laquelle on affiche des points d’intérêt.

    Mon problème se trouve dans l'affichage de ceux-ci. Je ne maîtrise que peu la gestion des images dans Swing, et ne parviens pas à ajouter ces fameux îcones représentant des point d'intérêt sur ma carte.

    Voici le code sur lequel je me suis arrêté après de multiple recherche (c'est l'un des rares que j'ai à peu prêt compris, et celui qui avait l'air de fonctionner le mieux)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    			BufferedImage tmp = new BufferedImage(I.getCoordonneesX(), I.getCoordonneesY(), BufferedImage.TYPE_INT_RGB);
     
    			Image image = tmp;
     
    			Graphics g = tmp.createGraphics();
     
    			super.paintComponents(g);
    			image = getToolkit().getImage("mon chemin d’accès");
    			if(image != null){
    				g.drawImage(image, I.getCoordonneesX(), I.getCoordonneesY(), this); 
    			}
    Ce code se trouve dans une boucle for basée sur une liste d'objet. (objet I dans ce cas. Lorsque je lance le programme, aucune erreur n'est signalée, cependant, lorsque je le relance en mode Debug, je constate que mes objet sont bien remonté, mais je tombe sur la fenêtre suivante :

    Source not found
    Edit Source Lookup File...

    Après quelque recherche, j'ai vu que l'origine de ce problème, c'était l'élément JdbcOdbcDriver situé dans la librairie rt.jar. (Plus précisément la méthode Finalize())

    Peut-être est-ce un problèmes sans lien avec mon affichage, peut-être pas, je vous avoue être perdue sur ce coup.

    Certains d'entre vous seront peut-être à même de m'aiguiller?
    Merci d'avance.

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    en ce qui concerne le message Source not found, Edit Source Lookup File..., il est dû au fait que vous déboguez pas-à-pas en essayant d'entrer dans le code JdbcOdbcDriver situé dans la librairie rt.jar
    Vous n'avez pas ce code source, donc le débogueur ne peut pas continuer le pas-à-pas. Ce qui ne l'empêche pas d'exécuter le code si vous faites du pas-à-pas sortant.
    Par exemple dans Eclipse,
    - l'appui sur [F5] provoque le débogage ligne par ligne en essayant d'entrer dans le code... si vous n'avez pas le source, vous obtenez le message d'alerte indiqué ci-dessus.
    l'appui sur [F6] provoque un pas-à-pas dans votre code, mais saute le débogage du code des librairies.

    Ensuite, pour ce qui est du dessin d'image, essayez de créer une BufferredImage de la taille globale de votre image, puis créez le contexte graphique de celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    BufferedImage tmp = new BufferedImage( largeur, hauteur, BufferedImage.TYPE_INT_ARGB );
    g2D = tmp.createGraphics();
    puis dessinez simplement dans cette BufferedImage, ne déclenchez l'affichage qu'à la fin des boucles.

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    Merci de votre aide, votre explication sur le "File not found" m'a aidé également.

    J'ai pas mal avancé, et j'ai également opté pour l'utilisation d'un layeredPane, cependant, je ne parviens pas à positionner l'image dans le coin superieur gauche de ce Pane. (Et pourtant j'ai bien l'impression d'avoir initialiser sa position)

    Y-a t-il une propriété que je n'ai pas remarqué pour faire cela?

    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
    layeredPane.removeAll();
     
    			BufferedImage tmp = new BufferedImage(1,
    					1, BufferedImage.TYPE_INT_RGB);
     
    			Image image;
     
    			ImageIcon img = new ImageIcon(l.getImage());
     
    			lblmap = new JLabel(img);
    			lblmap.setBounds(0, 0, img.getIconHeight(), img.getIconWidth());
    			layeredPane.add(lblmap, new Integer(0));
     
    			Graphics g = tmp.createGraphics();
     
    			super.paintComponents(g);
    			image = getToolkit().getImage(l.getImage());
    			if (image != null) {
    				g.drawImage(image, 0, 0, layeredPane);
    				for (int i = 0; i < layeredPane.getComponents().length - 1; i++)
    					layeredPane.getComponent(i).setLocation(250, 250);
     
    				layeredPane.moveToBack(lblmap);
    				layeredPane.revalidate();
    				frmMinisig.repaint();
     
    			}
    J'image qu'une partie du code est peu utile, et qu'il en manque un morceau, mais la seule chose qui me manque est la reposition de l'image

    Une fois ce problème résolu, je pense être capable de finaliser les autres fonctionnalités

    Merci d'avance

  4. #4
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    difficile de rentrer dans le projet de quelqu'un, je suppose que vos n'avez pas livré tout le code dans le post.
    Il est probable que lblmap soit positionné en haut à gauche dans le JLayeredPane, mais que ce dernier ne soit pas en haut à gauche de votre fenêtre.
    Quel est le Layout affecté à votre fenêtre principale, gérant la position de layeredpane ?
    Quel est le Layout affecté à layeredpane, gérant les composants ajoutés ?

    Essayez de donner une couleur de fond à layeredpane, sans y ajouter d'image afin de voir déjà sa taille et son positionnement....

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    En ce qui concerne le layout, il est défini via le designer à absolute, pour les deux éléments.

    Et pour la couleur, je suis toujours en train d'essayer d'en afficher :'x

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    Finalement, j'ai passé les valeur du panel en brut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lblmap.setBounds(0, 0, 614, 568);
    L'image est partielle, mais elle à l'avantage de prendre toute la place qui lui ait attribué.

    Je vais passer à d'autres fonctionnalités pour le moment, merci de l'aide apportée.

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Recuperer une valeur dans une grille sur une image
    Par gwal21 dans le forum Images
    Réponses: 3
    Dernier message: 26/02/2011, 23h41
  3. Réponses: 3
    Dernier message: 15/04/2009, 07h30
  4. Réponses: 3
    Dernier message: 16/01/2006, 16h02

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