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
|
package Geometrie;
import java.awt.Graphics;
import java.util.ListIterator;
import javax.swing.JPanel;
import traitement.Fichier;
import traitement.Point;
/**
* Méthode permettant de dessiner dans notre panneau.
* Elle hérite de Jpanel ce qui nous permet de redefinir la méthode PaintComponent
* permettant de dessiner dans le Panel.
*
* Seul le fichier est neccessaire pour le bon fonctionnement du dessin.
* Il est à noté que le Fichier est traité à sa création.
*
* @autor Le Borgne Vincent
*
*/
public class Panel extends JPanel{
/**
*
*/
private static final long serialVersionUID = 1L;
private Fichier saisie;
public Panel() {
super();
}
public Panel(Fichier saisie) {
this();
this.saisie = saisie;
}
public Fichier getSaisie() {
return saisie;
}
public void setSaisie(Fichier saisie) {
this.saisie = saisie;
}
/**
* @param g le graphique sur lequel nous devons dessiner.
* Il est important de faire tous les dessins dans cette méthode. Si nous le faisons
* dans différentes méthodes nous avons des soucis de stabilité d'image. En effet en utilisant
* d'autres méthodes, plus simple à coder, l'image disparait à chaque évenement: minimisation, redimentionnement.
*
* Il est indispenssable d'appeler la super méthode PainComponent, pour pouvoir dessiner.
*
* A l'aide d'un itérateur, nous allons parcourir notre liste chainée de Point. Cette liste
* a été créé en même temps que notre fichier.
* Nous stoquons chaque coordonnée de point de la liste dans deux variables locales x et y.
* Nous stoquons aussi les coordonnées du point précedent de la liste, afin de pouvoir tracer
* des droites entre les points.
* Il est important d'adpter les coordonnées de X et Y au format de notre fenetre.
* Dans un premier temps, nous cadrons chaque point en lui soustraiant la plus petite des valeurs
* Ensuite nous multiplions par le coeficient d'ajustement.
* Notre axe des ordonnées est inversé par rapport à l'axe terrestre, nous multilions chaque valeur par -1
* afin d'inverser l'axe.
*/
public void paintComponent(Graphics g){
if(this.saisie!=null){
super.paintComponent(g);
ListIterator<Point> iter= saisie.getListPoint().listIterator(0);
Point temp=new Point();
temp=iter.next();
int x=(int)((temp.getLongitude()-saisie.getEchelle().getMinimumX())*saisie.getEchelle().getCoef());
int y=(int)((temp.getLatitude()-saisie.getEchelle().getMinimumY())*saisie.getEchelle().getCoef()*-1);
int xPrec=x, yPrec=y;//La première ligne ne sert à rien. c'est simplement de l'initialisation
if(x<0||x>600||y>600||y<0)
System.out.println("X= "+ x + " Y= "+ y);
g.drawOval(x, y, 1, 1);
while(iter.hasNext()){//Tant qu'il y a un élément dans la liste
temp=iter.next();
x=(int)((temp.getLongitude()-saisie.getEchelle().getMinimumX())*saisie.getEchelle().getCoef()-saisie.getEchelle().getAjustZoomX());
y=(int)((temp.getLatitude()-saisie.getEchelle().getMinimumY())*saisie.getEchelle().getCoef()*-1-saisie.getEchelle().getAjustZoomY());
g.drawOval(x, y, 1, 1);
g.drawLine(x,y,xPrec,yPrec);
if(x<0||x>600||y>600||y<0)
System.out.println("X= "+ x + " Y= "+ y);
xPrec= x;
yPrec= y;
}
}
}
} |
Partager