IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Graphisme Java Discussion :

Problème de déplacement d'un objet dessiné


Sujet :

Graphisme Java

  1. #1
    Membre confirmé
    Avatar de mhamedbj
    Profil pro
    Inscrit en
    Février 2007
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 403
    Points : 554
    Points
    554
    Par défaut Problème de déplacement d'un objet dessiné
    bonjour,
    j'ai ecris ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public interface Dessinable {
     
        public void dessiner(Graphics g);
     
        public Rectangle getRectangle();
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    public abstract class FormesDessinable implements Dessinable{
     
     
        protected Rectangle rectangle;
        protected Color color = Color.BLACK;
     
        /** Creates a new instance of FormesDessinable */
        public FormesDessinable(Point position, Dimension dimention) {
            this.rectangle = new Rectangle(position,dimention);
     
        }
     
        public abstract void dessiner(Graphics g);
     
        public Rectangle getRectangle(){
            return this.rectangle;
        }
     
     
        public Point getPoint(){
            return this.rectangle.getLocation();
        }
     
        public void setPoint(Point p){
            this.rectangle.setLocation(p);
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    public class SurfaceDeDessin extends JPanel implements MouseListener, MouseMotionListener{
     
        /** Creates a new instance of SurfaceDeDessin */
        public SurfaceDeDessin() {
            addMouseListener(this);
            addMouseMotionListener(this);
            setBackground(Color.WHITE);
        }
        //dessine tous les objets de ma liste d'objets cree
        public void paint(Graphics g){
            super.paint(g);
            for(FormesDessinable f :listeDesFormes)
                f.dessiner(g);
        }
     
    // un click de bouton ajoute un rectangle dans la liste et 
    // le repaint le dessine 
        public void mouseClicked(MouseEvent e) {
                Forme F = new Forme(new Point(e.getPoint()));
                listeDesFormes.add(F);
                repaint();
        }
    //pour puvoir faire bouger l'objet je detecte si j'ai bien clické sur un objet
        public void mousePressed(MouseEvent e) {
            FormesDessinable FD = getObjet(e.getPoint());
            if (FD == null)
                return;
            objetEnDeplacement =  FD;
        }
     
        public void mouseReleased(MouseEvent e) {
            objetEnDeplacement = null;
        }
     
        public void mouseEntered(MouseEvent e) {
        }
     
        public void mouseExited(MouseEvent e) {
        }
    //je fait le setPoint pour lui donner les nouvelles coordonné puis reapint
        public void mouseDragged(MouseEvent e) {
            if(objetEnDeplacement != null){
                objetEnDeplacement.setPoint(e.getPoint());
                repaint();
            }
        }
     
        public ArrayList<FormesDessinable> getListeDesFormes() {
            return listeDesFormes;
        }
    //revoie l'objet a partir du point sur le quel on a cliké
    public FormesDessinable getObjet(Point p){
            for(FormesDessinable F : listeDesFormes){
                if(F.getRectangle().contains(p))
                    return F;
            }
            return null;
        }
        private FormesDessinable objetEnDeplacement = null;
        private ArrayList<FormesDessinable> listeDesFormes = new ArrayList<FormesDessinable>(); 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    ///le forme que je vais dessiner
    public class Forme extends FormesDessinable {
     
        public Forme(Point position) {
            super(position,new Dimension(90,30));
        }
     
        public void dessiner(Graphics g) {
            g.setColor(color);
     
            g.drawRect(rectangle.x,rectangle.y,rectangle.width,rectangle.height);
           g.setColor(Color.white);
        }
     
     
    }
    le problème c'est que quand je click sur le carré pour le bouger, il bouge sans problème, mais une fois déplacé je ne peut plus le bougé que a partir de sa position initiale : je m'explique:

    supposant que j'ai dessiner le carré au point 10,10 de ma surface de dessin et que ensuite je le deplace ju'squau point 80,80, il se deplace bel et bien cad qil se trouve bien au oint 80,80 mais si je veux le redeplacer et que je place le souris sur le point 80,80 il ne bouge pas. par contre si je place ma souris au point 10,10 et que je bouge la souris mon carré se redessine a ce point et il est possible alors de le deplacer, je n'arrive pas a savoir pq !!???
    qq a une idée ???

    mreci
    Si on tombe un jour... c'est pour mieux se relever !!
    Take a look

    Mon début de carrière

  2. #2
    Membre actif Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Points : 205
    Points
    205
    Par défaut
    Salut

    j'ai compilé et testé ton code, le compilateur m'a signalé une erreur:
    La méthode mouseMoved(MouseEvent m) n'est pas overridé dans la class
    SurfaceDeDessin.

    je l'ai ajouté, et tout fonctionne à la perfection !?!?!?!.

    Voici mon code test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public class Dessin extends JFrame {
     
    	public Dessin(){
    		add(new SurfaceDeDessin());
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setSize(500, 500);
    		setVisible(true);
     
    	}
     
    	public static void main(String arg[]){
    		new Dessin();
    	}
    }

  3. #3
    Membre confirmé
    Avatar de mhamedbj
    Profil pro
    Inscrit en
    Février 2007
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 403
    Points : 554
    Points
    554
    Par défaut merci
    merci bcp et désolé pour ceux qui ont perdu leur temps a lire mes conneries je mérite une bonee
    c'est une erreur banale mais j'ai passé trois jours a la cherché, (surement l'effet d'un surmenage je vais prendre des vacances )

    encore désolé et merci !!!
    Si on tombe un jour... c'est pour mieux se relever !!
    Take a look

    Mon début de carrière

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Points : 6
    Points
    6
    Par défaut je n'ai pas bien compris !!
    C'est un vieux sujet mais ....

    je n'ai pas bien compris ce que veux dire jibbi par "La méthode mouseMoved(MouseEvent m) n'est pas overridé"

    Cependant, j'ai compilé le code, et j'ai remarqué que lorsqu'on fait un drag avec la souris, le rectangle saute "brutalement" de sa position initiale à la position de la souris puis il est "drager" normalement par la souris.

    Une solution à ce saut brutal est de se souvenir de sa position du départ dans la class SurfaceDeDessin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    ....
    private int xmo, ymo, xro, yro;
    ....
        public void mousePressed(MouseEvent e) {
            FormesDessinable FD = getObjet(e.getPoint());
            if (FD == null) return;
            objetEnDeplacement =  FD;
            xro = FD.getRectangle().x;
            yro = FD.getRectangle().y;
            xmo = e.getX();
            ymo = e.getY();
        }
    ....
        public void mouseDragged(MouseEvent e) {
            if(objetEnDeplacement != null){
            	objetEnDeplacement.setXYPoint(xro+e.getX()-xmo, yro+e.getY()-ymo);
                repaint();
            }
        }
    ....
    Voila c'est tout

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par mhamedbj Voir le message
    bonjour,
    j'ai ecris ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public interface Dessinable {
     
        public void dessiner(Graphics g);
     
        public Rectangle getRectangle();
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    public abstract class FormesDessinable implements Dessinable{
     
     
        protected Rectangle rectangle;
        protected Color color = Color.BLACK;
     
        /** Creates a new instance of FormesDessinable */
        public FormesDessinable(Point position, Dimension dimention) {
            this.rectangle = new Rectangle(position,dimention);
     
        }
     
        public abstract void dessiner(Graphics g);
     
        public Rectangle getRectangle(){
            return this.rectangle;
        }
     
     
        public Point getPoint(){
            return this.rectangle.getLocation();
        }
     
        public void setPoint(Point p){
            this.rectangle.setLocation(p);
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    public class SurfaceDeDessin extends JPanel implements MouseListener, MouseMotionListener{
     
        /** Creates a new instance of SurfaceDeDessin */
        public SurfaceDeDessin() {
            addMouseListener(this);
            addMouseMotionListener(this);
            setBackground(Color.WHITE);
        }
        //dessine tous les objets de ma liste d'objets cree
        public void paint(Graphics g){
            super.paint(g);
            for(FormesDessinable f :listeDesFormes)
                f.dessiner(g);
        }
     
    // un click de bouton ajoute un rectangle dans la liste et 
    // le repaint le dessine 
        public void mouseClicked(MouseEvent e) {
                Forme F = new Forme(new Point(e.getPoint()));
                listeDesFormes.add(F);
                repaint();
        }
    //pour puvoir faire bouger l'objet je detecte si j'ai bien clické sur un objet
        public void mousePressed(MouseEvent e) {
            FormesDessinable FD = getObjet(e.getPoint());
            if (FD == null)
                return;
            objetEnDeplacement =  FD;
        }
     
        public void mouseReleased(MouseEvent e) {
            objetEnDeplacement = null;
        }
     
        public void mouseEntered(MouseEvent e) {
        }
     
        public void mouseExited(MouseEvent e) {
        }
    //je fait le setPoint pour lui donner les nouvelles coordonné puis reapint
        public void mouseDragged(MouseEvent e) {
            if(objetEnDeplacement != null){
                objetEnDeplacement.setPoint(e.getPoint());
                repaint();
            }
        }
     
        public ArrayList<FormesDessinable> getListeDesFormes() {
            return listeDesFormes;
        }
    //revoie l'objet a partir du point sur le quel on a cliké
    public FormesDessinable getObjet(Point p){
            for(FormesDessinable F : listeDesFormes){
                if(F.getRectangle().contains(p))
                    return F;
            }
            return null;
        }
        private FormesDessinable objetEnDeplacement = null;
        private ArrayList<FormesDessinable> listeDesFormes = new ArrayList<FormesDessinable>(); 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    ///le forme que je vais dessiner
    public class Forme extends FormesDessinable {
     
        public Forme(Point position) {
            super(position,new Dimension(90,30));
        }
     
        public void dessiner(Graphics g) {
            g.setColor(color);
     
            g.drawRect(rectangle.x,rectangle.y,rectangle.width,rectangle.height);
           g.setColor(Color.white);
        }
     
     
    }
    le problème c'est que quand je click sur le carré pour le bouger, il bouge sans problème, mais une fois déplacé je ne peut plus le bougé que a partir de sa position initiale : je m'explique:

    supposant que j'ai dessiner le carré au point 10,10 de ma surface de dessin et que ensuite je le deplace ju'squau point 80,80, il se deplace bel et bien cad qil se trouve bien au oint 80,80 mais si je veux le redeplacer et que je place le souris sur le point 80,80 il ne bouge pas. par contre si je place ma souris au point 10,10 et que je bouge la souris mon carré se redessine a ce point et il est possible alors de le deplacer, je n'arrive pas a savoir pq !!???
    qq a une idée ???

    mreci
    Bonjour,

    Ayant "piqué" ton code pour faire quelques bricoles, je me permets de te poser une petite question :

    • Comment peut on passer la Dimension (classe Forme) en paramètres que tu rentres via une petite fenetre que je vais intégrer dans la classe (SurfaceDeDessin) ?
    • Je m'explique, je veux e fait que quand je clique dans la surface de dessin, qu'il y'ait une combobox qui permet à l'utilisateur de definir la taille de ton schéma ?!?


    Gratias en avance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [eZ Publish] Problème de déplacement d'objet
    Par azrael62 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 10/10/2013, 11h09
  2. Déplacement d'un objet dessiné par paint
    Par bazzouz dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 30/08/2007, 02h18
  3. [TTreeView] Problème avec les pointeurs d'objet
    Par BlackWood dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/07/2004, 14h31
  4. [C#] Problème pour l'appel d'objet...
    Par AntiSAL dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/06/2004, 09h59
  5. Réponses: 10
    Dernier message: 01/12/2003, 23h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo