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 :

[MouseEvent] arret de souris = repaint() ?


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 165
    Par défaut [MouseEvent] arret de souris = repaint() ?
    Bonjour.

    Je suis en train de faire un outil de sélection a la souris sur mon panel.
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    public void mousePressed(MouseEvent e){
     
                    //recup coordonnées point de départ
    	startX = (int)e.getPoint().getX();
    	startY = (int)e.getPoint().getY();	
    }
     
    public void mouseReleased(MouseEvent e){
     
                   stopX = (int)e.getPoint().getX();
                   stopY = (int)e.getPoint().getY();
                   dessine(panel.getGraphics());
    }
     
     
    public void mouseDragged(MouseEvent e) { 
     
                  stopX = (int)e.getPoint().getX();
                  stopY = (int)e.getPoint().getY();
                  repaint();
                  dessine(panel.getGraphics());
    }
     
     
    public void dessine(Graphics g) { 
     
       //dessin : bas-gauche vers haut-droit
       if(startX < stopX && startY > stopY){
       	 largeur = stopX-startX;
       	 hauteur = startY-stopY;
       	 g.drawRect(startX, stopY, largeur, hauteur);
       }
       //dessin : haut-gauche vers bas-droit
      if(startX < stopX && startY < stopY){
       	 largeur = stopX-startX;
       	 hauteur = stopY-startY;
       	 g.drawRect(startX, startY, largeur, hauteur); 
       }
       //dessin : bas-droit vers haut-gauche
      if(startX > stopX && startY > stopY){
       	 largeur = startX-stopX;
       	 hauteur = startY-stopY;
       	 g.drawRect(stopX, stopY, largeur, hauteur);
      }
      //dessin : haut-droit vers bas-gauche
       if(startX > stopX && startY < stopY){
       	 largeur = startX-stopX;
       	 hauteur = stopY-startY;
       	 g.drawRect(stopX, startY, largeur, hauteur); 
      }
     
     
    }
    Vous remarquerez que ma méthode repaint() est appelée sur mon MouseDragged() qui appelle repaint() (effacement de la figure précedemment dessinée) pui appelle la méthode dessine.

    Mais j'ai un probleme:
    Le dessin se passe tres bien (de maniere dynamique) : pendant le déplacement de ma souris, la figure précédente s'efface et la nouvelle se redéssine. Le nerf du probleme est que lorsque j'arrete de déplacer ma souris, l'image disparait (comme si un evenement on "MouseStopMoving" appelait une methode repaint).

    D'ou ca vient svp ?

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 165
    Par défaut
    j'ai résolu mon probleme en faisant a la place de mon repaint un panel.update(panel.getGraphics()).

    est-ce que quelqu'un peut m'expliquer clairement la différence entre la méthode repaint et la méthode update ? d'apres la javadoc la méthode repaint appelle la méthode update.

    Je mettrai le tag résolu des que j'aurai la réponse Merci d'avance

  3. #3
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    La méthode paint fonctionne souvent en parallèle avec les méthodes repaint et update. Un appel à la méthode repaint correspond à appeler la méthode update, sans avoir à préciser le contexte graphique (c'est la méthode repaint qui s'en charge). La méthode update appelle à son tour la méthode paint, en ayant auparavant effectué quelques mises à jour dans le contexte graphique. Par défaut, la méthode update dessine un carré de la taille du Component, à l'emplacement (0,0). Cela a pour effet d'effacer tout ce qui se trouvait dans le contexte graphique du Component. Pour éviter cela et des problèmes de clignotement à l'écran, il peut être utile de surcharger la méthode update et de ne faire effacer le fond d'écran que lorsque cela est nécessaire et/ou aux endroits où cela est nécessaire.

    voir ca : http://www.cines.fr/textes/specif_java.html

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 165
    Par défaut
    Merci de ta réponse. Je regarde ton site.

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

Discussions similaires

  1. [Mouse] Position de la souris a l'arret en 1.4.2
    Par taillooo dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 03/08/2009, 14h29
  2. Timer pour detecter souris a l'arret
    Par olibara dans le forum C#
    Réponses: 5
    Dernier message: 22/09/2008, 00h02
  3. Arret du slide au passage de la souris.
    Par Akaton dans le forum Flash
    Réponses: 0
    Dernier message: 01/07/2008, 11h14
  4. écouter l'arret de la souris ?
    Par Lady dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 20/06/2007, 16h22
  5. Récupérer coords souris quand elle s'arrete de bouger
    Par seb-oulba dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/08/2006, 17h21

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