JavaFX Touche Enfoncée événement pour la scène ne s'est pas exécuté si il y a un volet sur les
J'ai un code pour exécuter une fonction lorsque certains touche est enfoncée:
scene.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.F1) {
doSomething();
}
});
Et cela fonctionne, mais seulement si il n'y a pas de composants destinés, comme un Bouton ou un Champ de texte.
J'ai remarqué qu'il fonctionne si je presse CTRL+F1, ou ALT+F1, ou MAJ+F1, mais seulement F1 fonctionne si il n'y a pas de volet sur.
Est-il un moyen pour éviter cela?
-----Mise à JOUR-----
@James_D dit, je peux le faire à l'aide de eventFilter au lieu de gestionnaire d'événements:
scene.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode().equals(KeyCode.ESCAPE)) {
try {
FXMLLoader fxmlLoader = new FXMLLoader(TelaPrincipalController.class.getResource("/br/com/atualy/checkout/layout/telaoperacoescaixa.fxml"));
Parent parent = fxmlLoader.load();
Scene scene = new Scene(parent, 600,400);
Stage stage = new Stage();
stage.setScene(scene);
stage.initModality(Modality.APPLICATION_MODAL);
stage.initOwner(this.stage);
stage.showAndWait();
System.out.println("----> THIS IS BEING PRINTED TWICE ! <----");
} catch (IOException e) {
e.printStackTrace();
}
}
});
La ligne 12 du présent code est imprimé deux fois pour chaque touche ESC appuyez sur. Ce qui signifie que lorsque j'appuie sur esc, il ouvre la nouvelle fenêtre, et quand je le ferme, la fenêtre s'ouvre une fois de plus.
Puis-je le résoudre?
System.out.println(...)
OriginalL'auteur Mateus Viccari | 2014-06-09
Vous devez vous connecter pour publier un commentaire.
Utiliser un filtre d'événement à la place. Certains contrôles consommer des principaux événements de presse, donc à l'aide d'un filtre d'événement vous permet de les gérer avant que le contrôle consomme.
Ressemble filtre d'événement est exécutée deux fois, si à l'intérieur le code que j'ai ouvert une nouvelle fenêtre Modale. Voir ma mise à jour dans la question merci
Essayez d'utiliser
KeyEvent.KEY_RELEASED
au lieu deKeyEvent.KEY_PRESSED
.Pourquoi utiliser cette ligne me donne une, méthode addEventFilter en classe, la Scène ne peut pas être appliqué pour les types de donnée; requis: EventType<T>,EventHandler<? super T>: int,(événement)->S[...]de()) erreur de compilation
OriginalL'auteur James_D