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 :

[Debutant] Question MouseWheelEvent


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 82
    Par défaut [Debutant] Question MouseWheelEvent
    Bonjour,

    J'ai besoin de récupérer l'ampleur de la rotation de la roulette de la souris.

    Je suis bien entendu aller voir du coté du mouseWheelMoved, et j'utilise la fonction getWheelRotation()
    Mais celle ci ne me renvoie que "-1" ou "1", alors que d'après javadoc, elle devrait me retourner l'amplitude également.

    En cherchant un peu, je crois qu'en fait quand je tourne la molette de la souris de 3 impulsions, il y a 3 MouseWheelEvent qui sont créer... chacun avec un getWheelRotation() = 1 ou -1

    La question...
    Comment puis-je récupérer un getWheelRotation() = 3 ou -3


    Merci d'avance
    Richard

  2. #2
    Membre éprouvé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    Tu crées une variable globale qui va être initialisée à 0 et qui va ajouter la valeur de getWheelRotation() à chaque fois qu'il est invoqué.

    0
    +1
    +1
    -1
    etc etc etc

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 82
    Par défaut
    Bon ma question n'était pas assez précise.

    Effectivement avec un compteur je peux calculer l'ampleur de rotation. Mais à la fin de cette rotation, je veux lancer un nouvel événement (et la seule manière que j'ai trouvé pour lancé cet évènement est de le mettre à la fin de la procedure mouseWheelMoved).

    Donc si je me sers de cette procédure comme d'un compteur, je vais lancer cet événement autant de fois qu'elle sera appellée. Alors que l'événement ne dois etre lancé qu'une seule fois.

  4. #4
    Membre éprouvé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    Mais pourquoi ne pas juste te servir de la valeur de la variable au moment de lancer ta procédure. Elle ne sera lancée qu'une fois en utilisant la valeur 3 par exemple.

  5. #5
    Membre chevronné Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Par défaut
    tu fais deriver ta classe de MouseListener;
    tu met addMouseWheelListener(this)
    et tu redefinis la methode mouseWheelMoved(MouseWheelEvent e) de la façon que te sera utile.

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 82
    Par défaut
    --> MeDioN,

    Parce que cette procédure est lancée par mouseWheelMoved, Donc si je fais ce que tu suggères, elle sera lancée 3 fois !!! (Parce que 3 crans de rotation de la molette souris = 3 appel de mouseWheelMoved). Certainement car Java considère qu'il y a eu 3 mouvements de molette différent au lieu d'un...


    --> let_me_in

    euhh... je suis pas sur de te suivre...
    voila le code... au cas ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    		addMouseWheelListener (new MouseWheelListener ()  {
    			public  void mouseWheelMoved (MouseWheelEvent e) { 
    				int nb_crans = e.getWheelRotation(); 
    				int i = 0;
    				int modif_zoom_percent_for_wheel = 105;
    				e.getComponent()
    				pos_curseur_x = e.getPoint().x;
    				pos_curseur_y = e.getPoint().y;
    				while ( i <= (nb_crans - 1)) {
    					Zoom_moche(modif_zoom_percent_for_wheel);
    						i++;
    				}
    Zoom_beau(modif_zoom_percent_for_wheel);


    là, vous comprenez ma détresse en voyant que getWheelRotation() ne retourne pas ce que je veux...


    Merci à vous en tout cas, je rentre prendre une tisane
    Richard

  7. #7
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    getWheelRotation() renvoie le sens de rotation. Pour connaitre le nombre d'unite, il suffit de lire la doc de MouseWheelEvent et d'appeler getUnitsToScroll() qui te donne la direction + le nombre d'unites. getScrollAmount() te donne juste le nombre d'unites.

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 82
    Par défaut
    Merci pour ta réponse, mais je l'ai lu la doc de MouseWheelEvent :

    getWheelRotation() :
    Returns the number of "clicks" the mouse wheel was rotated.

    (et effectivement accessoirement le sens de la rotation).

    GetUnitsToScroll & getScrollAmount, ne renvoies que des informations relative à la distance de scrolling en pixel (car une unité de roulette à la souris n'est pas égal à un pixel).


    Mon problème c'est que getWheelRotation ne renvoie effectivement que du -1 ou du 1, en tracant le programme on voit que c'est parce que l'evènement mouseWheelMoved(MouseWheelEvent e) est appellé immédiatement et autant de fois que la molette de la souris a été tournée.

    Effectivement, la solution aurait pu etre de mettre un compteur. Mais ce ne semble pas être possible, car mon mouseWheelMoved doit lancer un évènement à la fin de la rotation (et je ne sais pas comment identifier qu'une rotation est terminée, donc l'évènement se retrouve lancé à chaque passage dans mouseWheelMoved (passage nécessaire pour le compteur).


    ++Richard

  9. #9
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 82
    Par défaut
    Bon,
    ne vous embétez pas à essayer de comprendre ce que je raconte.
    Finalement, je vais utiliser une autre solution pour gérer mon zoom.

    (via une API externe appelée ImagePlus qui fournit des procédures très rapides).

    +R

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

Discussions similaires

  1. [debutant]Question technique
    Par toto4650 dans le forum Débuter
    Réponses: 23
    Dernier message: 13/07/2005, 02h06
  2. Réponses: 48
    Dernier message: 06/01/2005, 18h02
  3. [debutant]Question toute bete sur le messages
    Par flogreg dans le forum Servlets/JSP
    Réponses: 18
    Dernier message: 09/09/2004, 09h07
  4. [debutant] Questions a propos du XML
    Par brune dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 04/06/2004, 09h39
  5. [debutant] Questions sur 1 futur projet
    Par cyrull22 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/04/2003, 21h49

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