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

Résolu
rastaprogram Messages postés 18 Date d'inscription mercredi 18 février 2004 Statut Membre Dernière intervention 27 janvier 2006 - 27 janv. 2006 à 18:04
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 - 30 janv. 2006 à 21:50
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

bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
30 janv. 2006 à 21:50
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.
3