décalage du curseur (voir image)

décalage du curseur (voir image) - Java - Programmation

Marsh Posté le 02-06-2009 à 07:30:15    

Bonjour,
 
Je suis entrain de développer un logiciel de traitement d'image, mais je rencontre un soucis qui me fait rager.... j'obtiens un décalage entre là où est mon curseur et là où le tracé s'effectue, j'ai regardé au moins 20fois mon projet je vois rien qui cloche.
 
Je ne sais même pas quel partie du code je pourrais poster car je vois rien qui cloche donc pour vous faire une idée du soucis voilà un screenshot :
http://www.object-manu.net/jpaintpb.jpg
 
et ici les sources (avec un jar à l'intérieur):
http://www.object-manu.net/JPaint.zip
 
Classe où il y a le addListener();
Dessin.java :

Code :
  1. //tout les points du dessin
  2.     private ArrayList<Point> point = new ArrayList<Point>();
  3.    
  4.     public Dessin(Feuille p){
  5.         parent = p;
  6.         width = parent.getWidth();
  7.         height = parent.getHeight();
  8.         pRealTime = parent.getParent().getPRealTime();
  9.        
  10.         if(parent.getTypeRequest() == FichierMenu.NOUVEAU_FICHIER)
  11.         {
  12.             colorFond = parent.getInfo().getC();
  13.         }
  14.         else if(parent.getTypeRequest() == FichierMenu.OUVRIR_FICHIER)
  15.         {
  16.             image = parent.getImg();
  17.         }
  18.        
  19.         this.addMouseListener(new MouseAdapter(){
  20.             public void mousePressed(MouseEvent e){
  21.                 point.add(new Point(e.getX() - (pRealTime.getSizePointer()/2),
  22.                                     e.getY() - (pRealTime.getSizePointer()/2),
  23.                                     pRealTime.getSizePointer(),
  24.                                     pRealTime.getColorPointer(),
  25.                                     pRealTime.getFormPointer()));
  26.                 repaint();
  27.             }
  28.         });
  29.         this.addMouseMotionListener(new MouseMotionListener(){
  30.             public void mouseDragged(MouseEvent e) {
  31.                 point.add(new Point(e.getX() - (pRealTime.getSizePointer() / 2),
  32.                         e.getY() - (pRealTime.getSizePointer() / 2),
  33.                         pRealTime.getSizePointer(),
  34.                         pRealTime.getColorPointer(),
  35.                         pRealTime.getFormPointer()));
  36.                 repaint();
  37.             }
  38.             public void mouseMoved(MouseEvent e) {}
  39.         });
  40.     }
  41.     public void paintComponent(Graphics g){
  42.         g.setColor(colorFond);
  43.         g.fillRect(0, 0, width, height);
  44.             for(Point p : this.point)
  45.             {
  46.                 g.setColor(p.getColor());
  47.                
  48.                     g.fillRect(p.getX(), p.getY(), p.getSize(), p.getSize());
  49.             }
  50.     }
  51. }


Avez vous idée sur comment je peux résoudre ce problème ?


Message édité par manu f le 02-06-2009 à 07:40:46

---------------
Pire qu'une pierre dans la chaussure, est un grain de sable dans la capote.  Coluche.
Reply

Marsh Posté le 02-06-2009 à 07:30:15   

Reply

Marsh Posté le 02-06-2009 à 10:59:14    

A première vue je dirai que c'est un problème de position relative/absolue de la frame ou de ton panel.

Reply

Marsh Posté le 02-06-2009 à 15:14:57    

Je me demande si c'est possible que ce soit principalement due à un problème d'architecture ?
 
Car là j'ai beau cherché je vois pas comment résoudre le problème.


Message édité par manu f le 02-06-2009 à 15:19:28

---------------
Pire qu'une pierre dans la chaussure, est un grain de sable dans la capote.  Coluche.
Reply

Marsh Posté le 02-06-2009 à 15:28:09    

Le décalage semble être de la même taille que la hauteur de la barre du haut de ton programme (menu+toolbar) donc à mon avis ça vient d'un problème de coordonnées.
J'avais eu un problème similaire avec un awt.Robot qui reproduisait mes clics avec un décalage. Mais j'ai zappé ce petit projet donc j'ai pas résolu le problème.
Regarde où se trouve le point 0 du curseur et du panel/canvas où tu dessines.

Reply

Marsh Posté le 02-06-2009 à 16:13:23    

Effectivement le décalage correspond au point (0,0) de mon application jusqu'au point (0,0) de ma JInternalFrame.
 
Le soucis c'est que ça m'avance pas plus dans mon problème, le addListener est appliqué sur le bon composant etc... donc je vois pas pourquoi ce décalage à lieu. :/


---------------
Pire qu'une pierre dans la chaussure, est un grain de sable dans la capote.  Coluche.
Reply

Marsh Posté le 02-06-2009 à 16:36:14    

Je pense que quand tu dessines avec le Graphics il ne prend en compte que le panel/canvas concerné et donc le (0,0) correspond au coin de ce panel et non le point (0,0) de l'application.
Donc à mon avis il faut que tu utilises par exemple : void  translate(int dx, int dy) sur tes Points pour redécaler dans le bon sens où dx et dy sont les coordonnées du coin du panel mais dans la frame globale (je sais pas si c'est clair).


Message édité par Deamon le 02-06-2009 à 16:36:52
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed