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

 Java Discussion :

Dessiner plusieurs formes avec des coordonnées venant d'un HashMap


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut Dessiner plusieurs formes avec des coordonnées venant d'un HashMap
    Bonjour,

    J'ai un petit soucis au niveau de mon code du coup je fais appelle à votre aide précieuse ^^

    En fait j'ai un fichier texte qui contient un hashmap avec un couple <nom d'un motif, coordonnée du motif en point2D>.
    Le but est de lire ce fichier texte et de dessiner des cercles suivant ces coordonnées.


    Mais j'ai un soucis avec ma méthode paintComponent.
    Je fais une boucle while pour parcourir mon hashmap et dessiner le cercle pour chaque coordonnées, seulement j'obtiens bien les différents nom de motifs mais au niveau des coordonnées, j'ai seulement les coordonnées du dernier motif qui sont pris en valeur pour toutes mes clés.

    Ex:
    lecture du hashmap:
    Code console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    motif1=1,1
    motif2=2,2
    motif3=3,3

    et lorsque je suis dans paintComponent j'ai
    Code console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    motif1=3,3
    motif2=3,3
    motif3=3,3

    du coup cela m'affiche seulement un cercle sur mon image.
    J'ai essayé plusieurs bidouilles mais rien n'a fonctionné.

    Voici le code que j'ai:

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    package Profil;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.geom.Ellipse2D;
    import java.awt.geom.Point2D;
    import java.awt.geom.Point2D.Double;
    import java.awt.image.BufferedImage;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
     
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    @SuppressWarnings("serial")
    public class Graph extends JFrame
    {
     
    	BufferedImage image;
    	JPanel contentPane = new JPanel();
    	JPanel panel = new JPanel();
    	JPanel panel2= new JPanel();
    	private int X0;
    	private int Y0;
    	private int X1;
    	private int Y1;
    	private double X;
    	private double Y;
    	private Point2D.Double valeur;
    	private Object cle;
    	int compteur=0;
    	@SuppressWarnings("rawtypes")
    	private HashMap map = new HashMap();
     
     
    	public Graph(BufferedImage image, Slide slide)
    	{
    //L'objet Slide contient mon HashMap patterns avec les valeurs que j'ai lu depuis le fichier texte. J'ai vérifié au niveau de la lecture si les valeurs étaient correctes pour chaque clés et cela est le cas donc mon soucis ne vient pas de la lecture.
     
    	this.map=slide.patterns;
    	this.image=image;
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	this.setSize(900,700);
    	this.setLocationRelativeTo(null);
    	this.setResizable(false);
    	this.setTitle("Slide");
    	this.setContentPane(contentPane);
    	contentPane.setLayout(new BorderLayout());
    	contentPane.setBackground(Color.gray);
    	panel.addMouseListener(new MouseAdapter() {
     
    		@Override
    		public void mouseClicked(MouseEvent click) 
    		{
    			compteur++;
    			if (compteur==1)
    			{
    //Permet d'avoir des coordonnées de référence pour faire une translation car dans mon HashMap le motif de coordonnée (0,0) est au centre de l'image et non en haut à gauche
    				X0=click.getX();
    				Y0=click.getY();
    			}
    			else
    			{
    //Permet de se déplacer sur l'image et de retourner les coordonnées du curseur
    				X1=click.getX();
    				Y1=click.getY();
    				repaint();
    			}
     
    		}
    	});
     
    	panel.setPreferredSize(new Dimension(700, 700));
     
    	contentPane.add(panel, BorderLayout.WEST);
    	panel.setLayout(new BorderLayout(0, 0));
    	Zone zone = new Zone();
    	panel.add(zone);
     
    	panel2.setPreferredSize(new Dimension(200, 700));
     
    	contentPane.add(panel2, BorderLayout.EAST);
    	panel2.setLayout(new BorderLayout(0, 0));
     
    	}
     
    class Zone extends JComponent 
    {
     
    	   public void paintComponent(Graphics g) 
    	   {
    		  super.paintComponent(g);
    	      Graphics2D surface =(Graphics2D)g;
    	      surface.scale((int)(image.getWidth()/image.getWidth()),(int)(image.getHeight()/image.getHeight()));
    	      surface.drawImage(image,0,0, this.getWidth(), this.getHeight(), this);
     
    	      Ellipse2D cercle = new Ellipse2D.Double((int)X1-5,(int)Y1-5,10,10);
    	      surface.setPaint(Color.RED); 
    	      surface.fill(cercle);
     
    	      @SuppressWarnings("rawtypes")
    		Iterator iterator = map.entrySet().iterator();
    	      while(iterator.hasNext())
    	      {
    	    	  @SuppressWarnings("rawtypes")
    			  Map.Entry mapentry = (Map.Entry) iterator.next();
    	    	  cle=mapentry.getKey();
    //C'est ici que j'ai mon soucis, où valeur ne correspond qu'à la dernière valeur de mon Hashmap pour toutes les clés
    	    	  valeur=(Double) mapentry.getValue();
    	    	  System.out.println(valeur.getX()+"\t"+valeur.getY());
    	    	  X=valeur.getX()/image.getWidth();
    	    	  Y=valeur.getY()/image.getHeight();
    	    	  surface.drawOval((int)X+X0-5,(int)Y+Y0-5,10,10);
     
     
    	      }
     
     
     
    	  	}
    	}
    }


    Merci par avance de prendre le temps de me lire et de m'aider ^^

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par Peppa_ Voir le message
    J'ai essayé plusieurs bidouilles mais rien n'a fonctionné.
    Lesquelles ?

    Les itérateur c'est bien mais ça fait très 2005 donc on a bien mieux depuis pour parcourir une map :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (Map.Entry<String, Point2D.Double> entry : map.entrySet()) {
      [...]
    }
    Ou encore:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    map.entrySet()
      .stream()
      .forEach(entry -> {
        [...]
      });
    Egalement ca serait mieux de mettre le bon type générique sur ta map...

    Après tu dois bien te douter que si toutes les coordonnées sont identiques sur toutes les clés de ta map c'est que tu as un soucis avec cette map...
    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

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Par défaut
    Salut,

    Comme la mentionne Bouye,

    Tu parcours ta map de la bonne maniere (certe vieille mais exact lol) donc il serait preferable de verifier ton code au niveau de la creation et mise a jour de ta map.

    Good luck

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut
    Merci beaucoup pour vos réponses!

    Effectivement j'avais un soucis au niveau de la lecture du fichier texte et je n'avais pas checker au bon endroit s'il y avait une erreur "oupsii" donc tout est ok!

    J'ai testé le for (Map.Entry<String, Point2D.Double> entry : map.entrySet()) c'est nickel merci !

    Bonne journée à vous !

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

Discussions similaires

  1. Dessiner un cercle avec des coordonnées géographiques
    Par giloutho dans le forum Mathématiques
    Réponses: 17
    Dernier message: 14/10/2010, 13h05
  2. dessiner une ligne avec des point de coordonnées doubles
    Par tanguy.L dans le forum Débuter
    Réponses: 2
    Dernier message: 12/11/2008, 00h16
  3. [VB.NET] Form avec des Nuances de Transparence !!
    Par jazz matazz dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/02/2006, 13h00
  4. Changer plusieur style avec des IDs différents?
    Par YanK dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/07/2005, 15h33
  5. Ecrire du texte avec des coordonnées 3D
    Par julian_ross dans le forum DirectX
    Réponses: 3
    Dernier message: 21/06/2005, 16h05

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