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

Agents de placement/Fenêtres Java Discussion :

Problème avec touch screen et mouseListener


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Points : 65
    Points
    65
    Par défaut Problème avec touch screen et mouseListener
    Bonjour,

    Voila, mon problème n'est à priori pas un problème de programmation Java, mais je viens tout de même poster ici en espérant trouver une solution de contournement.

    Contexte:
    Pour vous mettre dans le contexte, je développe une application Java permettant de piloter un robot (avant/arrière/droite/gauche). Dans une IHM Swing, j'ai donc tout simplement 4 Jbuttons pour piloter le robot.
    Sur chacun des boutons, j'ai le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void mouseReleased(MouseEvent evt) {
    	jButtonForwardMouseReleased(evt);
    }
    public void mousePressed(MouseEvent evt) {
    	jButtonForwardMousePressed(evt);
    }
    Qui peut se traduire par: dés que je clique sur le bouton, j’appelle ma fonction jButtonForwardMousePressed et dés que je relâche le clique j’appelle ma fonction jButtonForwardMouseReleased.

    Tous marche très bien lorsque je contrôle le robot depuis mon portable.
    Par contre l'environnement cible d'exécution du programme est un UMPC Viliv S5 avec un écran tactile sous Windows 7.

    Sur le Viliv S5, lorsque je pose mon doigt sur le bouton, l'event mousePressed est bien déclenché, mais quelques micro secondes plus tard l'event mouseReleased est déclenché (pourtant le bouton est toujours enfoncé), arrêtant mon robot.

    La problème:
    Après un peu d’investigation, j'ai compris que la fonctionnalité "press and hold" de Windows 7 se déclenche sur un long clique gauche sur le touchscreen. Ce long clique gauche est transformé automatiquement en un clique droit.

    En gros, pour reproduire cela avec une souris, c'est comme si: on cliquait sur le bouton avec le bouton gauche de la souris (et on reste appuyé), puis cliquait sur le bouton droit (tout en restant toujours appuyé sur le bouton gauche) et enfin on relâchait le bouton droit (toujours le bouton gauche appuyé). Java prend donc en compte le relâchement du clique droit et déclenche mouseReleased

    La solution?
    J'ai bien essayé de désactivé cette option sous Windows 7 mais pas moyen (aucune option).
    J'ai tenté de modifier une clef de registre mais rien non plus.

    Je viens donc demander votre aide. Piste: Y'a t'il moyen de reconnaître quel bouton de souris à été relâche droite ou gauche?

    Merci beaucoup! et bonne fêtes

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Dans l'event passé en paramètre, tu as le numéro du bouton concerné. Regarde déjà si le release correspond aussi au gauche. Si oui, tu l'a dans l'OS Il faudra coder spécifiquement pour l'interface tactile.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Dans l'event passé en paramètre, tu as le numéro du bouton concerné. Regarde déjà si le release correspond aussi au gauche. Si oui, tu l'a dans l'OS Il faudra coder spécifiquement pour l'interface tactile.
    Merci pour ta réponse tchize_.
    En fait, j'ai trouvé une solution entre temps. J'ai rajouté un test sur la méthode isPopupTrigger de l'event. Apparemment, cette méthode indique si le clique ou relâchement à été appelé depuis le bouton permettant l’accès au menu contextuel. Dans mon cas comme il s'agit bien du clique droit, ça marche niquel.

    Le nouveau code pour ceux que ça intéresse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void mouseReleased(MouseEvent evt) {
    	if(!evt.isPopupTrigger()){
    		jButtonDroiteMouseReleased(evt);
    	}
    }
    Merci beacuoup

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

Discussions similaires

  1. Problème avec Full-Screen Exclusive mode API
    Par SheikYerbouti dans le forum Composants
    Réponses: 2
    Dernier message: 08/02/2010, 06h49
  2. Problème avec Touches Windows et Menu "Démarrer"
    Par legolfeur dans le forum Windows Vista
    Réponses: 0
    Dernier message: 21/12/2008, 11h09
  3. Réponses: 3
    Dernier message: 18/02/2008, 11h56
  4. Problème avec Les MouseListener
    Par ohhh.gringo dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 01/12/2006, 14h06
  5. [VB6] Problème avec la touche 0 dans une MaskEdBox
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/03/2006, 09h47

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