Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3050 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  KeyStroke.getKeyStroke()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

KeyStroke.getKeyStroke()

n°1070197
chaica
Posté le 03-05-2005 à 11:43:58  profilanswer
 

Bonjour,
 
Petit problème en Java, dans un menu je veux me servir d'un accelerator pour les raccourcis de touche. J(utilise pour l'instant ça qui marche

Code :
  1. about.setAccelerator ( KeyStroke.getKeyStroke (
  2. KeyEvent.VK_A , InputEvent.CTRL_MASK ) ) ;


 
sachant que KeyEvent.VK_A est le A d'une chaîne "About" définie avant. J'aimerais donc me passer de cette valeur fixe et la faire varier en fonction de la chaîne entrer avec une commande du style :

Code :
  1. about.setAccelerator ( KeyStroke.getKeyStroke (
  2. KeyEvent.getKeycode( ma_chaine.atChar(0) ) , InputEvent.CTRL_MASK ) ) ;


mais getKeyCode dépend d'un évènement, je suis un peu coincé là.


---------------
Du taf dans le Logiciel Libre : https://www.linuxjobs.fr
mood
Publicité
Posté le 03-05-2005 à 11:43:58  profilanswer
 

n°1070216
Nicolas_75
Posté le 03-05-2005 à 11:58:42  profilanswer
 

Bonjour,
 
Dans ton premier exemple, tu utilises :

getKeyStroke(int keyCode, int modifiers)  
Returns a shared instance of a KeyStroke, given a numeric key code and a set of modifiers.


 
Pour ton 2ème exemple, pourquoi ne pas utiliser :

getKeyStroke(Character keyChar, int modifiers)  
Returns a shared instance of a KeyStroke, given a Character object and a set of modifiers.

?
 
ce qui donnerait :

Code :
  1. about.setAccelerator (KeyStroke.getKeyStroke(new Character(ma_chaine.charAt(0)), InputEvent.CTRL_MASK));


(Je n'ai pas essayé moi-même).
 
Nicolas


Message édité par Nicolas_75 le 03-05-2005 à 12:00:44
n°1070276
chaica
Posté le 03-05-2005 à 12:28:12  profilanswer
 

Merci d'avoir répondu,  
Ta solution paraît bonne, mais je n'ai pas le même comportement quand j'utilise les constantes de KeyEvent et la méthode getKeyStroke que tu proposes. Avec la constante il me ferme bien l'appli, mais pas avec le caractère. bizarre bizarre...
 
J'ai ça dans ma classe menu:

Code :
  1. quitter = new JMenuItem ( NOM_MENU_ITEM_1_3 ) ;
  2.  quitter.setMnemonic ( NOM_MENU_ITEM_1_3.charAt ( 0 )  ) ;
  3.  quitter.setAccelerator ( KeyStroke.getKeyStroke (
  4.   new Character (  NOM_MENU_ITEM_1_3.charAt ( 0 ) ) , InputEvent.CTRL_MASK ) ) ;
  5.  quitter.addActionListener ( fen ) ;
  6.  fichier.add ( quitter ) ;


 
et dans ma fenêtre un :

Code :
  1. public void actionPerformed ( ActionEvent e ) {
  2.  if ( e.getSource () ==  menuCree.getQuitter () ) {
  3.   System.exit ( 0 ) ;
  4.  }
  5. }


 
Si ça peut aider. Au pire j'utiliserai les constantes mais je ne trouve pas ça propre.
@+


Message édité par chaica le 03-05-2005 à 12:28:43

---------------
Du taf dans le Logiciel Libre : https://www.linuxjobs.fr
n°1070396
Nicolas_75
Posté le 03-05-2005 à 14:01:52  profilanswer
 

J'ai essayé chez moi, et je rencontre le même problème que toi.
Je m'en suis sorti en passant par la valeur numérique cachée derrière KeyEvent.VK_A et ses frères.
 

Code :
  1. quitter.setAccelerator(KeyStroke.getKeyStroke(Character.getNumericValue(NOM_MENU_ITEM_1_3.charAt(0))+55, InputEvent.CTRL_MASK));


 
Ce n'est pas très propre. Mais en attendant mieux...
 
Nicolas


Message édité par Nicolas_75 le 03-05-2005 à 14:02:41
n°1070441
the real m​oins moins
Posté le 03-05-2005 à 14:24:33  profilanswer
 

j'utilise http://java.sun.com/j2se/1.4.2/doc [...] ng.String) , super simple :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1070476
Nicolas_75
Posté le 03-05-2005 à 14:51:22  profilanswer
 


Effectivement !  :)  Merci.
 
Dans notre exemple :

Code :
  1. quitter.setAccelerator(KeyStroke.getKeyStroke("ctrl "+NOM_MENU_ITEM_1_3.substring(0,1)));


 
Nicolas

n°1070483
the real m​oins moins
Posté le 03-05-2005 à 14:55:35  profilanswer
 

bon, dans ce cas, c'est pas tres propre; perso je l'utilise en lisant les raccourcis depuis un fichier de config, spour ça


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1070517
Nicolas_75
Posté le 03-05-2005 à 15:15:49  profilanswer
 


Le problème de chaica était apparemment de créer le raccourci de manière automatique, en utilisant la première lettre du libellé du JMenuItem. Il me semble que le code ci-dessus, que tu as inspiré, y répond plutôt proprement.  :)  
 
Nicolas

n°1070635
chaica
Posté le 03-05-2005 à 16:18:07  profilanswer
 

Merci j'avais vu cette solution mais je trouvais pas ça très propre. D'un autre côté, c'est encore plus laid avec la variable mise en dur comme dans mon premier post. Donc je trancherai un peu plus tard :D
Merci à vous deux en tout cas!


Message édité par chaica le 03-05-2005 à 16:18:36

---------------
Du taf dans le Logiciel Libre : https://www.linuxjobs.fr

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  KeyStroke.getKeyStroke()

 

Sujets relatifs
Plus de sujets relatifs à : KeyStroke.getKeyStroke()


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)