Au sujet d'un traçage de ligne avec Drawline

[Résolu]
Signaler
Messages postés
18
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
27 janvier 2006
-
Messages postés
388
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
3 mai 2006
-
Voila, j'ai fais un petit prog qui trace des lignes toute bete.
Avec une pression sur le bouton de la souris je crée la ligne et
ensuite elle s'agrandit au fur et a mesure que le curseur bouge dans la
fenêtre. Une fois le bouton de souris relaché, la ligne est créée.

Le pb est lorsque je veux dessiner une ligne oblique, avec mon
programme elle ne se dessine que du haut gauche vers le bas droit.



Voici mon Code car les explications ne sont pas très clair (dsl !!!).

<hr size="2" width="100%">

import java.awt.*;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionListener;

import javax.swing.*;

public class Ligne extends JPanel{



int xDep,yDep,xArr,yArr;

int x,y;



public Ligne(){

setLayout(new BorderLayout());

addMouseListener(new PointeDessin());

addMouseMotionListener(new BougeDessin());

}



public void paint(Graphics g){

//super.paint(g);

g.setColor(Color.red);

g.drawLine(x,y,getWidth()-1,getHeight()-1);

}



public class PointeDessin implements MouseListener{





public void mousePressed(MouseEvent pointeur) {

xDep = pointeur.getX();

yDep = pointeur.getY();

}



public void mouseClicked(MouseEvent arg0) {}

public void mouseReleased(MouseEvent arg0) {}

public void mouseEntered(MouseEvent arg0) {}

public void mouseExited(MouseEvent arg0) {}

}



public class BougeDessin implements MouseMotionListener{



public void mouseDragged(MouseEvent pointeur) {

xArr = getX()+(pointeur.getX()-xDep);

yArr = getY() + (pointeur.getY()-yDep);

setBounds(xArr,yArr,getWidth(),getHeight());

repaint();

}



public void mouseMoved(MouseEvent arg0) {}

}

}




<hr size="2" width="100%">

import java.awt.*;

import java.awt.event.*;



import javax.swing.JFrame;

import javax.swing.JPanel;



public class ZoneDeDessin extends JPanel{



int xDep=0,yDep=0,xArr=0,yArr=0,l=0,h=0;

Graphics g;

Ligne L;

public ZoneDeDessin(){

super();

setBackground(Color.cyan);

addMouseListener(new Souris());

addMouseMotionListener(new SourisBouge());

setLayout(null);

}



public void paint(Graphics g){

super.paint(g);

}



public class Souris implements MouseListener{



public void mousePressed(MouseEvent pointeur) {

xDep = pointeur.getX();

yDep = pointeur.getY();

xArr = xDep;

yArr = yDep;

L = new Ligne();

add(L);

}



public void mouseClicked(MouseEvent pointeur) {}

public void mouseReleased(MouseEvent arg0) {}

public void mouseEntered(MouseEvent arg0) {}

public void mouseExited(MouseEvent arg0) {}

}



public class SourisBouge implements MouseMotionListener{



public void mouseDragged(MouseEvent pointeur) {

// TODO Auto-generated method stub



xArr = pointeur.getX();

yArr = pointeur.getY();

l = Math.abs(xArr-xDep);

h = Math.abs(yArr-yDep);



L.setBounds(Math.min(xDep,xArr),Math.min(yDep,yArr),l,h);



repaint();

}



public void mouseMoved(MouseEvent arg0) {}

}



public static void main(String s[]) {

JFrame f = new JFrame("Ligne");

f.addWindowListener(new WindowAdapter() {



public void windowClosing(WindowEvent e) {System.exit(0);}

});

ZoneDeDessin panel = new ZoneDeDessin();

f.getContentPane().add(panel, BorderLayout.CENTER);

f.pack();

f.setSize(new Dimension(350,250));

f.setVisible(true);

}

}





Merci d'avance

1 réponse

Messages postés
388
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
3 mai 2006
1
C'est normal qu'elle n'est pas oblique puisque c'est une ligne :)



Methode bidouille :

avoir une liste de points :

a chak event drag, tu ajoutes un point dans la liste correspondant aux
coords x,y de la souris, et tu paint une ligne entre chaque point.