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

JavaFX Discussion :

Raccourcis clavier en java FX


Sujet :

JavaFX

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Points : 110
    Points
    110
    Par défaut Raccourcis clavier en java FX
    Bonjour,

    Je suis actuellement en train de coder un lecteur audio en javaFX. J'arrive à la fin mais je me rend compte que j'ai beaucoup de mal à gérer mes raccourcis claviers.

    Par exemple sur la fenêtre principale, sur laquelle il y a le lecteur lui même, j'affecte à la touche droite le fait d'avancer de 3s dans la chanson :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SoundLooper.getInstance().getPrimaryStage().getScene().setOnKeyReleased(new EventHandler<KeyEvent>() {
    	@Override
    	public void handle(KeyEvent event) {
    		...
    		} else if (event.getCode() == KeyCode.RIGHT) {
    			// RIGHT : Move in media +3s
    			player.moveMediaTime(3000);
    			event.consume();
    		...
    	}
    Ce raccourci est positionné directement sur la fenêtre pour être activé quelque soit le champ qui a le focus
    Ca, ça fonctionne bien.

    Maintenant, j'ai également sur cette fenêtre un champ spinner qui permet de noter le volume entre 0 et 100. J'ai rajouté un filter dessus pour n'accepter que les numériques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    spinnerVolume.addEventFilter(KeyEvent.KEY_TYPED, new EventHandler<KeyEvent>() {
    	@Override
    	public void handle(KeyEvent event) {
    		if (!event.getCharacter().matches("[1-9]")) {
    			event.consume();
    		}
    	}
    });
    Je pensais qu'en faisant ça, les touches gauche et droite ne fonctionneraient même plus dans le spinner, mais si, elles fonctionnent encore, et un appui sur la touche droite a alors 2 actions :
    - Déplace le curseur dans le spinner
    - Avance de 3 seconde dans la chanson

    Je voudrai faire en sorte que la touche droite avance de 3 secondes dans la chanson quelque soit le champ qui a le focus, sauf si c'est un champ qui utilise déjà cette touche (comme un champ texte, par exemple), comment arriver à ça ?

    Autre exemple, toutes les popups de l'appli doivent se fermer avec la touche echap, j'ai une popup qui contient juste une combo box éditable, et un bouton valider.
    Sur le même principe, à l'initialisation du contrôleur, je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    stage.getScene().setOnKeyReleased(new EventHandler<KeyEvent>() {
    	@Override
    	public void handle(KeyEvent e) {
    		if (e.getCode() == KeyCode.ENTER) {
    			validate();
    		} else if (e.getCode() == KeyCode.ESCAPE) {
    			cancel();
    		}
    	}
    });
    Si le Textfield du combo box a le focus, un appui sur echap ne fait rien (je ne rentre pas dans la méthode "handle"). Par contre si j'appui sur tab pour quitter le textfield, et que je rappui sur échap, la popup se ferme bien.
    Par contre, si je remplace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else if (e.getCode() == KeyCode.ESCAPE)
    Par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else if (e.getCode() == KeyCode.RIGHT)
    La popup se ferme bien quand j'appuie sur la touche de droite, que je sois dans le textfield ou pas...

    Je pense donc que je passe à côté de quelque chose, et j'ai peur de devoir monter une usine à gaz pour me rapprocher du comportement que je veux au final.

    Quelqu'un saurait me dire ce que je fais de travers ??

    Merci d'avance,

  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
    Tu ne fais probablement rien de travers, il n'existe pas actuellement de manière d'enregistrer des raccourcis claviers globaux contrairement a Swing. Et encore moins de surcharger, interdire ou réécrire les divers touches et raccourcis qui sont utilisées par les divers skins des contrôles. Tout est donc au bon vouloir du contrôle qui a la focus...
    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 expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    J'avais un problème similaire je l'ai résolu en affectant mes touches de raccourci à un menu. Il semble que ça marche pas mal.
    Exemple Ctrl N pour nouveau fichier
    Voici ce que ça donne dans le FXML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <MenuItem mnemonicParsing="false" onAction="#handleNouveau" text="%menu.scenario.nouveau">
                         <accelerator>
                            <KeyCodeCombination alt="UP" code="N" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
                         </accelerator></MenuItem>
    Je reconnais que c'est un peu de la triche et pas très propre mais ça semble fonctionner.
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

Discussions similaires

  1. Raccourci clavier pour exécuter ma application JAVA
    Par clubist dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 23/05/2009, 18h07
  2. Réponses: 2
    Dernier message: 29/11/2007, 19h54
  3. Réponses: 4
    Dernier message: 24/04/2007, 18h05
  4. [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
  5. [] Raccourci clavier pour bouton d'une barre d'outil
    Par Sébastien dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 24/03/2003, 17h02

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