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);
}
}
}
} |
Partager