j'ai un léger problème conceptuel, en fait je pourrais élaborer une solution qui fonctionne mais j'ai l'impression que ce serait juste coller un pansement pour pas voir le saignement x)
J'explique rapidement:
J'ai un panel sur lequel interagissent plusieurs event.
L'idée c'est que si je clique sur mon panel, je vais stocker un point dans une liste.
Puis, en fonction de la position de ma souris, je vais tracer la ligne allant du point à la souris.
Cette partie là fonctionne, mais le soucis, c'est que si je trace, il faut aussi que j'efface l'ancien trait temporaire.
Ma première idée était en fait de redessiner un trait blanc par dessus pour cacher le trait noir; à l'exécution pour l'user ça fonctionne, mais ça me dérange et me donne l'impression de passer à coté de quelque chose d'essentiel.
En espérant que vous puissiez m'indiquer.
Voici l'extrait de code que j'ai mis en place
Les fonctions classiques add et remove d'une array list.
- Code: Tout sélectionner
public void ajouterPoint(Point p){
lignesTempo.add(p);
}
public void supprimerDernierPoint(){
lignesTempo.remove(lignesTempo.size()-1);
}
La fonction qui trace la ligne temporaire
Ici Point temp représente la position actuelle de la souris il s'agit du point généré par l'event mouseMoved
- Code: Tout sélectionner
public void tracerLigneTemporaire(Point temp){
System.out.println("Dessin");
int cpt=0;
Point last=null;
Graphics g=zoneDessin.getGraphics();
for(Point p:lignesTempo){
if(cpt==lignesTempo.size()-1){
//dernier point de la liste, on trace la ligne temp
ligneDark(g,p,temp);
}else{
if(cpt%2!=0){
//nbPoints pairs on trace la ligne
ligneDark(g,last,p);
}
}
last=p;
cpt++;
}
}
La fonction qui trace la ligne
- Code: Tout sélectionner
public void ligneDark(Graphics g,Point source,Point destination){
setBackground(Color.black);
g.drawLine(source.x,source.y,destination.x,destination.y);
}
Je ne mets pas les events car je suis sûr que c'est ok de ce coté là, le problème vient juste du fait que je veux pouvoir effacer une ligne qui n'est pas fixé tant que je n'ai pas fait l'ajout définitif du point par un clic.