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 :

[Applet]simuler une touche clavier


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 83
    Points : 42
    Points
    42
    Par défaut [Applet]simuler une touche clavier
    Bonjour,

    J'ai une applet java "jtviewer" (dispo sur le web) pour faire un panoramique. La fonction zoom est accessible par les touches + et - du clavier. J'ai cré deux boutons: zoom+ et zoom- avec lesquels j'aimerais reproduire les effets de zoom des touches + et -
    Je voulais donc savoir comment faire pour dire que lorsque je clic sur le bouton zoom+ ça revient à appuyer sur la touche +

    Merci pour votre aide



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

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    suggestion :

    si t'as un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void keyTyped(KeyEvent e){
       //si touche "+" alors 
          // code zoom +
     
       //si touche "-" alors
          //code zoom -
    }
    transforme le en :
    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
     
    public void zoomIn(){
       //code zoom +
    }
     
    public void zoomOut(){
       //code zoom -
    }
     
    public void keyTyped(KeyEvent e){
       //si touche + alors
          zoomIn()
     
       //si touche - alors
          zoomOut()
    }
    Et après il te reste plus qu'à inclure la capture d'évènements liés à tes boutons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void actionPerformed(ActionEvent e){
       //si bouton+ alors
          zoomIn();
     
       //si bouton- alors
           zoomOut();
    }
    Et ainsi, pas besoin de simuler quoi que ce soit

    a+
    Tous les goûts sont dans MA nature... tant qu'on me paye ! (Moi)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 83
    Points : 42
    Points
    42
    Par défaut
    oui en effet.

    merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    ou alors d une maniere plus generale,

    tu te fais un objet Action (qui etends AbstractAction) et tu l applique a ton bouton (setAction()) et aux touches de ton clavier (+ et - )
    via KeyMap (addActionForKeyStroke(KeyStroke, Action)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Tiens benohite Saurais tu par hasard comment se débrouiller pour faire un keyListener général à un panel...
    J'ai tenté pas mal de trucs, mais je ne connais pas les KeyMap etc. J'ai regardé un tutorial, mais c'est encore assez flou...
    J'aimerais faire un truc du genre quand j'appuie sur telle touche (où que sois le focus dans l'appli) ça fasse telle chose ...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 32
    Points
    32
    Par défaut
    le pb c'est que chaque composant qui a le focus risque d'avoir sa propre action map Définie... donc de manière générale c'est chaud...
    La force Luc, la force...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Non !! Je viens de réussir !! J'ai compris le tutorial ! Je suis trop content !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    tu utilise le meme principe tu crees un objet Action que tu ajoutes a la keymap de ta fenetre
    ensuite il te faut dire a tes sous composants d utiliser la keymap de la fenetre
    (methode setResolveParent(Keymap)) ou alors redefinir de la meme facon la keymap de tous les sous composants

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Si ton post concerne ma question benohite, c'est pas tout à fait ce que j'ai fait.
    J'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Action do_query = new AbstractAction()
    {
      public void actionPerformed(ActionEvent e)
      {
        doQuery();
      }
    };
    this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),"doQuery");  this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),"doQuery2");
    this.getActionMap().put("doQuery", do_query);
    this.getActionMap().put("doQuery2", do_query);
    Sachant que this étend JPanel

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    oui ca concernait ta question

    ta methode est bien mieux ca evite de redefinir plus key map bien vu
    j vais faire comme ca dorenavent

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Cependant Benohite, tu auras peut-être des pb avec des JFormattedTextField. En effet, une action par défaut est liée à la touche entrée (Commit), j'ai dû faire un petit bidouillage pas super beau pour que ça fonctionne dans mon cas. Si ça t'intéresse demande (je suis pas sur que ma méthode soit la bonne ) Mais là, on s'éloigne du propos du post ....

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par tmcgrady
    Mais là, on s'éloigne du propos du post ....
    lol oui mais est ce si grave ? et puis ca pourras toujours servir a qqn

    pour retirer l action (commit) du JFormattedTextField suffit de retirer l action assiocier de l ActionMap:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //creation d un keystroke pour la touche (commit); 0 touche appuyée et relachée
    KeyStroke toucheEntrer = KeyStroker.getKeyStroke(KeyEvent_VK_ENTER,0);
     
    //recuperation de l objet identifiant dans l InputMap du textfield
    InputMap im = textfield.getInputMap();
    Object idEntrer = im.get(toucheEntrer);
     
    //maintenant on peut retirer l objet action associé a la touche entrer pour le textfield
    ActionMap am = textfield.getActionMap();
    am.remove(idEntrer);
    voila je ne sais pas si c comme ca que tu as fait mais cette methode devrait fonctionner (pas testée )

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Benohite !

    Ce serait trop facile tu penses bien !

    J'ai testé pas mal de trucs et ta solution ne fonctionne pas chez moi ... (j'ai un composant qui étend JFromattedTextField)

    J'ai du faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ActionMap map = this.getActionMap();
        ActionMap map2 = new ActionMap();
     
        for(int i = 0; i < map.allKeys().length; i++)
        {
          Object o = map.allKeys()[i];
          if(!o.equals("notify-field-accept")) // champs qui correspond à la validation par la touche entree.
            map2.put(map.allKeys()[i], map.get(map.allKeys()[i]));
          else
            System.out.println("youpi ?");
        }
        this.setActionMap(map2);
    Bon, je sais que c'est pas optimisé du tout, d'ailleur j'ai un youpi qui traine ... mais là ca marche !

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    et meme si aprés avoir retirer l objet Action par defaut tu le remplace par celui de la frame
    parce que reconstruire toute l ActionMap c qd mm pas super mais si c la seule solution alors

    pourtant j avais utilisée cette solution pour inverser les touches de navigations dans une jtable et ca fonctionnait trés bien

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Je ne peut pas remplacer l'Action par défaut par celui de la frame parce qu'à ce niveau je n'ai pas de frame, je suis dans mon objet qui étend JFormattedTextField... En fait, mon truc marche et je pense que je vais, pour l'instant, par chercher plus loin... Je verrais ça si j'ai le temps ou si j'ai des ennuis... Si tu trouves une technique, n'hésite pas à m'en faire part.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    bon apparement ma methode marche
    je viens de l implementer sur une champ de saisie (de dates) pour passer le focus a une table située au dessous si on appuie sur entrer

    mon champ de saisie derivé d abord de Jtextfield puis pour verifier j ai changé sa super classe en JformattedTextfield et pas de pb ca passe

    voila le code que j ai utilisé:
    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
     
    	public void assigneToucheEntrer()
    	{
    		//construction de l objet action
                    EnterAction action = new EnterAction(tableSaisie);
    		//objet de donnees qui sera rempli qd on appuiras sur entrer
                    action.setEcriture(this.ecritureCourante);
                    //reference au textfield pour en recuperer la valeur lors de la validation
    		action.setChampSaisie(this.dateEcriture);
     
    		KeyStroke toucheEntrer = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0);
     
                    //recupere l inputmap du textfield
    		InputMap im = this.dateEcriture.getInputMap();
    		Object idEntrer = im.get(toucheEntrer);
     
                     //recupere l action map du textfield
    		ActionMap am =tdateEcriture.getActionMap();
    		am.remove(idEntrer);
    		am.put(idEntrer, action);
     
    	}

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    un grand merci a toi parce que ca faisait un moment que je me demandais comment j allais gerer ce passage de focus et là franchement c nickel

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    J'ai encore essayé ton code, dans un autre contexte et ça coince encore ...
    Il n'y a pas d'entrée dans la Map (InputMap) concernant le keyStroke VK_ENTER,... C'est d'ailleurs pour ça que je fais un allkeys() et non un keys tout seul sinon je capte rien !
    Pour l'instant c'est bon, c'est pas propre mais ça fonctionne, je vais lire qq trucs d'ici qq semaines, j'en saurais peut-être un peu plus.

    Moi aussi je suis content d'avoir trouvé cette méthode ! Avant c'était la galère pour gerer ça !

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par tmcgrady
    Il n'y a pas d'entrée dans la Map (InputMap) concernant le keyStroke VK_ENTER,...
    comment se fait il que moi je l ai et toi non alors qu on utilise le meme composant ?

    bref si elle n y est vraiment pas t as pas besoin de la retirer juste a l ajouter

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    salut,

    c encore moi

    je viens de trouver une autre methode bcp plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //construction de l objet Action
    action = new EnterAction(tableSaisie);
    action.setFenetre(this);
    action.setChampSaisie(this.dateEcriture);
     
    KeyStroke toucheEntrer = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0);
     
    //enregistrement du binding (KeyStroke-Action) sur le composant
    monTextField.registerKeyboardAction(action,toucheEntrer,JComponent.WHEN_FOCUSED);
    et voila

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

Discussions similaires

  1. Simuler une touche clavier
    Par jblecanard dans le forum C++
    Réponses: 2
    Dernier message: 20/12/2010, 14h33
  2. Simuler une touche clavier
    Par SPACHFR dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/12/2010, 20h02
  3. Réponses: 11
    Dernier message: 30/09/2008, 20h52
  4. Réponses: 3
    Dernier message: 03/06/2006, 16h59
  5. Simuler une touche clavier
    Par micky13 dans le forum Langage
    Réponses: 9
    Dernier message: 17/04/2006, 20h08

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