KeyStroke.getKeyStroke()

KeyStroke.getKeyStroke() - Java - Programmation

Marsh Posté le 03-05-2005 à 11:43:58    

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
Reply

Marsh Posté le 03-05-2005 à 11:43:58   

Reply

Marsh Posté le 03-05-2005 à 11:58:42    

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
Reply

Marsh Posté le 03-05-2005 à 12:28:12    

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
Reply

Marsh Posté le 03-05-2005 à 14:01:52    

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
Reply

Marsh Posté le 03-05-2005 à 14:24:33    

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 ?
Reply

Marsh Posté le 03-05-2005 à 14:51:22    


Effectivement !  :)  Merci.
 
Dans notre exemple :

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


 
Nicolas

Reply

Marsh Posté le 03-05-2005 à 14:55:35    

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 ?
Reply

Marsh Posté le 03-05-2005 à 15:15:49    


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

Reply

Marsh Posté le 03-05-2005 à 16:18:07    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed