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

Interfaces Graphiques en Java Discussion :

Rectangle qui se deplace(suite à un drag) en laissant des traces


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre actif Avatar de hugobob
    Profil pro
    FOI
    Inscrit en
    Septembre 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Gabon

    Informations professionnelles :
    Activité : FOI

    Informations forums :
    Inscription : Septembre 2005
    Messages : 169
    Points : 203
    Points
    203
    Par défaut Rectangle qui se deplace(suite à un drag) en laissant des traces
    Slt à tous !

    J'ai un petit code qui affiche une frame avec un rectangle !

    Quand on deplace le rectabgle , celui-ci laisse des traces derriere lui !

    Si quelqu'un peut m'aider !

    Voici le 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.Cursor;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GridLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.geom.Rectangle2D;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
     
    public class Rect extends JFrame {
      DrawingCanvas canvas;
      JLabel location;
     
      public Rect() {
        super();
        Container container = getContentPane();
        canvas = new DrawingCanvas();
        container.add(canvas);
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(1, 2));
        panel.add(new JLabel("x,y: ", JLabel.RIGHT));
        location = new JLabel("");
        panel.add(location);
        container.add(panel, BorderLayout.SOUTH);
        addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            System.exit(0);
          }
        });
        setSize(600,600);
        setVisible(true);
        }
     
        class DrawingCanvas extends JPanel {
        double x, y, w, h;
        int x1, y1, x2, y2;
        Rectangle2D rect;
        Cursor curCursor;
     
        public DrawingCanvas() {
          x = 20;
          y = 20;
          w = 100;
          h = 100;
          addMouseListener(new MyMouseListener());
          addMouseMotionListener(new MyMouseMotionListener());
        }
     
        public void paint(Graphics g) {
          Graphics2D g2D = (Graphics2D) g;
          setBackground(new Color(236, 233, 216));
          rect = new Rectangle2D.Double(x, y, w, h);
          g2D.draw(rect);
          if (curCursor != null)
            setCursor(curCursor);
        }
     
        class MyMouseListener extends MouseAdapter {
          public void mousePressed(MouseEvent e) {
            x1 = e.getX();
            y1 = e.getY();
            canvas.repaint();
          }
     
        }
     
        class MyMouseMotionListener extends MouseMotionAdapter {
          public void mouseDragged(MouseEvent e) {
            if (rect.contains(e.getX(), e.getY())) {
                  x2 = e.getX();
                  y2 = e.getY();
                  x = x + x2 - x1;
                  y = y + y2 - y1;
                  x1 = x2;
                  y1 = y2;
            }
            canvas.repaint();
          }
     
          public void mouseMoved(MouseEvent e) {
            if (rect != null) {
              if (rect.contains(e.getX(), e.getY())) {
                curCursor = Cursor
                    .getPredefinedCursor(Cursor.HAND_CURSOR);
              } else {
                curCursor = Cursor.getDefaultCursor();
              }
            }
            canvas.repaint();
          }
        }
     
      }
    }

  2. #2
    Membre actif
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Points : 276
    Points
    276
    Par défaut
    Salut
    Je n'ai pas regarder le code mais cela semble typique d'un non rafraichissement de la zone globale ou se trouve ton rectangle :
    En effet, si tu repaint le rectangle, il va repaint ... le rectangle, et non la zone en arriere plan, donc il ne va pas effacer ses tracer
    a+
    Non, Vahid n'est pas mon prénom
    c' est gratuit , aussi

  3. #3
    Membre actif Avatar de hugobob
    Profil pro
    FOI
    Inscrit en
    Septembre 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Gabon

    Informations professionnelles :
    Activité : FOI

    Informations forums :
    Inscription : Septembre 2005
    Messages : 169
    Points : 203
    Points
    203
    Par défaut
    Merci beaucoup !

    Je viens de faire un repaint du panel mais rien !


    Merci de m'aider !

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 851
    Points
    22 851
    Billets dans le blog
    51
    Par défaut
    Cela semble normal puisque le fond du panel n'est jamais peint. Au lieu de surcharger public void paint(Graphics g) surcharge donc protected void paintComponent(Graphics g) et appelle super.paintComponent(g) au debut, de plus au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setBackground(new Color(236, 233, 216));
    Fait donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.setColor(new Color(236, 233, 216));
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre actif Avatar de hugobob
    Profil pro
    FOI
    Inscrit en
    Septembre 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Gabon

    Informations professionnelles :
    Activité : FOI

    Informations forums :
    Inscription : Septembre 2005
    Messages : 169
    Points : 203
    Points
    203
    Par défaut
    Woaaouu !

    Merci beaucoup !

    Merci à tous !

    ça fonctionne !

    J'ai surcharger plutôt PaintComponent() au lieu de Paint()!

    Voila le nouveau 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
     
    import java.awt.Container;
    import java.awt.Cursor;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GridLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.geom.Rectangle2D;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class Cadre extends JFrame {
      DrawingCanvas canvas;
      JLabel location;
     
      public Cadre() {
        super();
        Container container = getContentPane();
        canvas = new DrawingCanvas();
        container.add(canvas);
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(1, 2));
        addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            System.exit(0);
          }
        });
        setSize(600,600);
        setVisible(true);
      }
     
      class DrawingCanvas extends JPanel {
        double x, y, w, h;
        int x1, y1, x2, y2;
        Rectangle2D rec;
        Cursor curCursor;
        public DrawingCanvas() {
          x = 0;
          y = 0;
          w = 140;
          h = 140;
          addMouseListener(new MyMouseListener());
          addMouseMotionListener(new MyMouseMotionListener());
        }
        public void paintComponent(Graphics g) {
          super.paintComponent(g);
          Graphics2D g2D = (Graphics2D) g;
          rec = new Rectangle2D.Double(x, y, w, h);
          g2D.draw(rec);
          if (curCursor != null)
            setCursor(curCursor);
        }
     
        class MyMouseListener extends MouseAdapter {
          public void mousePressed(MouseEvent e) {
            canvas.repaint();
            x1 = e.getX();
            y1 = e.getY();
          }
     
        }
        class MyMouseMotionListener extends MouseMotionAdapter {
          public void mouseDragged(MouseEvent e) {
            if (rec.contains(e.getX(), e.getY())) {
                x2 = e.getX();
                y2 = e.getY();
                x = x + x2 - x1;
                y = y + y2 - y1;
                x1 = x2;
                y1 = y2;
            }
            canvas.repaint();
          }
     
          public void mouseMoved(MouseEvent e) {
            if (rec != null) {
              if (rec.contains(e.getX(), e.getY())) {
                curCursor = Cursor
                    .getPredefinedCursor(Cursor.HAND_CURSOR);
              } else {
                curCursor = Cursor.getDefaultCursor();
              }
            }
            canvas.repaint();
          }
        }
      }
    }

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/12/2007, 18h35
  2. Trace d'un objet qui se deplace ?
    Par marcozar dans le forum Flash
    Réponses: 3
    Dernier message: 05/03/2007, 12h35
  3. Réponses: 2
    Dernier message: 07/08/2006, 11h30
  4. Réponses: 2
    Dernier message: 26/07/2006, 14h40
  5. Réponses: 12
    Dernier message: 09/06/2006, 07h27

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