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 :

Intégrer des raccourcis claviers dans une JFrame


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Intégrer des raccourcis claviers dans une JFrame
    Bonjour à tous,
    Je suis depuis plusieurs jours confronté à un problème dont je n'arrive pas à me sortir. Mes différentes recherches à la fois dans ce site bien complet (qui m'a sorti de pas mal de galères d'ailleurs) mais également sur la toile en général ne m'ont toujours pas permis de trouver une solution à un problème pourtant très simple.

    En effet, j'ai crée une classe héritant de JFrame dans laquelle j'aimerais que certaines options se lancent en utilisant un raccourci clavier.

    Notamment un raccourci qui exécute le Listener rattaché à un de mes JButton. J'avais pourtant trouvé dans la JavaDoc une fonction ressemblant fort à ce que je recherche mais rien n'y fait ça ne fonctionne pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delbutton.setMnemonic(KeyEvent.VK_F12);
    J'ai même été jusqu'à essayer des solutions farfelues à base de KeyListener rattaché à mon JPanel principal mais non je n'y arrive toujours pas !
    C'est pour cette raison que je sollicite votre aide afin de pouvoir enfin m'en sortir.

    En vous remerciant d'avance,
    Antoine 'FistOr' D.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Tout d'abords tu confond le mnemonic (la lettre qui permet d'activer le menu et qu'on voit soulignees en appuyant sur ALT) et l'accelerator (ici F12 - a savoir que l'accelerator ne fonctionne que sur les MenuItem). Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    delbutton.setText("Effacer");
    delbutton.setMnemonic('E'); //delbutton.setMnemonic(KeyEvent.VK_E);
    delmenuitem.setText("Effacer");
    delmenuitem.setMnemonic('E'); //delmenuitem.setMnemonic(KeyEvent.VK_E);
    delmenuitem.setAccelerator(KeyStroke.getKeyStroke("F12"));
    Ensuite il y a deux methodes plus pratiques pour se depatouiller de ce probleme :

    - creer les boutons et les menus a partir d'Action, une meme action definissant le texte, l'icone, le mnemonic, l'accelerator, le tooltip, l'etat et bien sur l'action a effectuer...

    - fouiller un peu plus en avant et utilser une InputMap et une ActionMap sur ton composant/ta fenetre. L'InputMap associe des KeyStroke a de cles, l'ActionMap associe des cles a des Action... bref quand on fait un racourcit clavier, l'action correcpondante est executee...
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Points : 216
    Points
    216
    Par défaut
    Bonsoir,

    Les mnemonics ne sont pas fait pour ça, il s'agit de raccourcis généralement utilisé dans les menus (la lettre servant de raccourci clavier est soulignée) et ils s'utilisent en combinaison avec la touche Alt.

    Ce que tu cherches ressemble plus a un Key Accelerator.
    Tu dois positionner le Key Accelerator sur l'action de ton bouton. Je n'ai pas d'exemple sous la main, j'en posterai un demain si tu veux.

    La dernière solution est de jouer avec les InputMap du contentPane avec l'option WHEN_IN_FOCUSED_WINDOW (A manier avec précaution).

    PS: Méfiance avec les raccourcis sur les touches de fonction, certains composants Swing utilisent déja certaines touches de fonction comme raccourcis (avec la méthode que j'ai indiqué plus haut) et il risque d'y avoir conflit.

    Fred


    Edit: Grillé par bouye !
    Fred

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Tout d'abord merci pour vos réponses !

    Donc si je comprends bien, je vais avoir dans mon cas recours à une Action sachant que je n'emploie pas de JMenuItem dans mon interface et que je compte affecter un raccourci "global" sur ma JFrame j'ai donc tenté d'avoir recours à des Action.

    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
    static class MonRaccourci implements Action {
        	static final String ACCELERATOR_KEY= Integer.toString(KeyEvent.VK_F12);
        	static final String MNEMONIC_KEY = Integer.toString(KeyEvent.VK_F12);
    		public void addPropertyChangeListener(PropertyChangeListener arg0) {	
    		}
    		public Object getValue(String arg0) {
    			return null;
    		}
    		public boolean isEnabled() {
    			return false;
    		}
    		public void putValue(String arg0, Object arg1) {
    		}
    		public void removePropertyChangeListener(PropertyChangeListener arg0) {
    		}
    		public void setEnabled(boolean arg0) {
    		}
    		public void actionPerformed(ActionEvent arg0) {
    			System.out.println("test");
    		}
     
        }
    Avec dans mon constructeur de JFrame

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delbutton.addActionListener(new MonRaccourci());
    Que j'active l'une ou l'autre variable mon raccourci clavier fonctionne une fois la touche ALT enfoncée comme prévenu plus haut. Même si à la base je cherchais juste à utiliser la touche F12, j'ai le sentiment qu'il faudrait chercher plus loin encore mais cette solution me va tout à fait.

    Merci beaucoup pour vos conseils, enfin débloqué sur ce problème !

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Points : 216
    Points
    216
    Par défaut
    Bonjour,

    D'après le code que tu donnes, ta classe "Action" ne sert a rien, le résultat aurait été identique avec ActionListener. Normalement quand on créer une action on hérite de AbstractAction et l'utilisation des Accelerators se fait par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    action.putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_F12));
    Mais comme l'a dit bouye, ça ne marche que si ton action est associée à un JMenuItem (en plus de ton bouton). Sinon, il faut utiliser la méthode avec les InputMap.

    Fred
    Fred

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

Discussions similaires

  1. raccourcis clavier dans une application web
    Par Issam dans le forum ASP.NET
    Réponses: 6
    Dernier message: 08/09/2008, 16h11
  2. Réponses: 3
    Dernier message: 22/07/2008, 19h29
  3. Réponses: 7
    Dernier message: 19/04/2007, 13h33
  4. Comment spécifier des raccourcis claviers sur une Form ?
    Par Sydaze dans le forum Composants VCL
    Réponses: 5
    Dernier message: 17/06/2005, 09h05
  5. [BPW]Raccourcis clavier dans une fenêtre enfant
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 18/02/2004, 20h07

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