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

AWT/Swing Java Discussion :

[Image]Dessiner une ligne en dynamique


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut [Image]Dessiner une ligne en dynamique
    Bonjour,

    Voici mon problème j'ai crée une petite classe qui devrait me permettre de créer une ligne dans un JPanel de manière dynamique. L'utilisateur clique sur la souris et fais un glisser jusqu'au point final de la ligne. Je souhaite que la ligne s'affiche de maniere permanente même si l'utilisateur n'à pas finaliser la ligne.

    voici mon code :

    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
    package Dessin;
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class CLigne
        extends JPanel
        implements MouseMotionListener {
     
      public CLigne() {
        CCadrePrincipale.jPanel1.addMouseMotionListener(this);
      }
     
      public void mouseMoved(MouseEvent e) {}
     
      private int x0 = 3000;
      private int y0 = 3000;
      private int x = 0;
      private int y = 0;
     
      public void mouseDragged(MouseEvent e) {
     
            x = e.getX() ;
            y = e.getY() ;
     
            if (x0 == 3000 && y0==3000)
            {
              x0 = e.getX() ;
              y0 = e.getY() ;
            }
                repaint();
      }
     
      protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(x0, y0, x, y);
      }
     
    }
    Je sais que la méthode pour dessiner la ligne n'est pas du tous optimisé mais ce n'est pas grave pour mon application. Le probleme est que je ne vois rien s'afficher quand je dessine, cela vient je pense de ma méthode paintComponent car les coordonnées (x0,y0,x,y) sont stockées correctement.

    merci




    [Modéré par Didier]
    Ajout de tag dans le titre
    Lire les règles du forum : Règles du forum Java

  2. #2
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Un problème de couleur de dessin, peut-être? C'est un grand classique...
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    Un problème de couleur de dessin, peut-être? C'est un grand classique...
    non, ce n'est pas ça , je n'ai pas eu droit à ce grand classique.

  4. #4
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    public au lieu de protected, sinon tu redefini pas la methode de dessin alors c'est normal que ca dessine pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        g.drawLine(x0, y0, x, y); 
      }
    Voila
    "Quand le sage montre la lune,
    L'idiot regarde le doigt."

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    public au lieu de protected, sinon tu redefini pas la méthode de dessin alors c'est normal que ca dessine pas
    Oups j'avais pas vu , malheureusement cela ne marche toujours pas , mais tu as qd même corrigé une de mes erreurs !

    Je viens de m'apercevoir d'un truc bizarre si je lance mon prog et que je dessine une ligne je ne vois rien mais si je redimensionne la fenêtre je vois un petit carré apparaitre dans mon jpanel, a chaque nouvelle ligne un nouveau carré apparait si je redimensionne la fenêtre.

    J'ai l'impression que je dessine pas ou il faut...

  6. #6
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Chez moi ca marche

    Test.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import javax.swing.*;
    import java.awt.*;
     
    public class Test{
     
      public static void main(String[] args){
        JFrame frame = new JFrame("toto");
        CLigne cligne = new CLigne();
        frame.getContentPane().add(cligne, BorderLayout.CENTER);
        frame.setVisible(true);
      }
    }
    CLigne.java
    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
    import javax.swing.*; 
    import java.awt.*; 
    import java.awt.event.*; 
     
    public class CLigne 
        extends JPanel 
        implements MouseMotionListener { 
     
      public CLigne() { 
        addMouseMotionListener(this); 
      } 
     
      public void mouseMoved(MouseEvent e) {} 
     
      private int x0 = 3000; 
      private int y0 = 3000; 
      private int x = 0; 
      private int y = 0; 
     
      public void mouseDragged(MouseEvent e) { 
     
            x = e.getX() ; 
            y = e.getY() ; 
     
            if (x0 == 3000 && y0==3000) 
            { 
              x0 = e.getX() ; 
              y0 = e.getY() ; 
            } 
                repaint(); 
      } 
     
      protected void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        g.drawLine(x0, y0, x, y); 
      } 
     
    }
    J'ai juste modifié le CCadrePrincipale.jPanel1.addMouseMotionListener(this); par addMouseMotionListener(this); pour que ca tourne chez moi.

    Je vois pas ce qui va pas dans ton code pour que ca marche pas chez toi :
    "Quand le sage montre la lune,
    L'idiot regarde le doigt."

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    Je suis daccord avec toi ton code marche mais chez moi ce n'est pas encore ça. Je m'explique j'ai fais l'appel à la fonction CLigne de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void jButton2_actionPerformed(ActionEvent e) {
          CLigne Ligne = new CLigne();
          this.getContentPane().add(Ligne); 
        }
    (Cette fonction est appelée après appuie sur un bouton) Cela marche à moitié :
    Je clique sur ligne et je dessine une premiere ligne en aveugle , je ne vois rien.
    Si je redimensionne ma fenêtre et que je redessine une ligne c'est bon ça marche.

    En bref si je ne redimensionne pas l'ecran avant de commencer à dessiner rien ne se passe !

    L'une des différences de nos programmes est aussi que tu dessines directement dans une frame tandis que moi je dessine dans un jpanel, je ne sais pas si cela peut t'éclairé.

  8. #8
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Citation Envoyé par Bugmaster
    L'une des différences de nos programmes est aussi que tu dessines directement dans une frame tandis que moi je dessine dans un jpanel, je ne sais pas si cela peut t'éclairé.
    Non je dessine dans un Panel (CLigne) qui est dans la Frame. Donc sur ce point les programmes sont pareil.


    A part ce petit point reglé, apparemment tu rajoute ton panel apres que ta frame soit créer, vu que c'est par appui sur un bouton. Donc apres ajout de ton nouveau panel faut que tu precise a ton appli que les composants ont changé, que tu as ajouté unn nouveau Panel, faut donc que tu fasse ca par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void jButton2_actionPerformed(ActionEvent e) { 
          CLigne Ligne = new CLigne(); 
          this.getContentPane().add(Ligne); 
          validate();
        }
    En esperant que ca marche
    "Quand le sage montre la lune,
    L'idiot regarde le doigt."

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    Merci narfiggo !!

    Ca marche , j'ai un bug sur le dessin de la ligne avec les anciennes coordonnées qui doivent garder en mémoire mais je m'en charge.

    Merci pour ton aide je ne connaissais pas du tous cette commande validate.

    encore merci

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

Discussions similaires

  1. Rechercher une ligne vide
    Par nico-pyright(c) dans le forum Traitement d'images
    Réponses: 7
    Dernier message: 22/12/2005, 17h10
  2. Comment dessiner une ligne dans un Chart ?
    Par libititi dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2005, 14h56
  3. nombres d'images sur une lign automatique
    Par AnKhCHFR dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/03/2005, 11h52
  4. Dessiner une ligne
    Par Bugmaster dans le forum 2D
    Réponses: 6
    Dernier message: 29/07/2004, 08h36
  5. Dessiner une ligne dans un cube transparent ?
    Par Muetdhiver dans le forum OpenGL
    Réponses: 4
    Dernier message: 04/05/2004, 11h06

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