web-dev-qa-db-fra.com

Comment récupérer la touche Entrée appuyée dans JavaFX 2?

J'ai un TextField pour entrer un terme de recherche, et un bouton pour "Go". Mais dans JavaFX2, comment pourrais-je faire en appuyant sur la touche Entrée dans le TextField effectuerait une action?

Merci :)

25
Geesh_SO

Vous pouvez utiliser l'attribut onAction de TextField et le lier à une méthode de votre contrôleur.

@FXML
public void onEnter(ActionEvent ae){
   System.out.println("test") ;
}

Et dans votre fichier FXML:

<TextField fx:id="textfield" layoutX="29.0" layoutY="298.0" onAction="#onEnter" prefWidth="121.0" />
30
Wottensprels

Je suppose que vous souhaitez que cela se produise lorsque l'utilisateur appuie sur Entrée uniquement pendant que le TextField a le focus. Vous voudrez utiliser KeyEvent hors de javafx.scene.input et faire quelque chose comme ça ...

textField.setOnKeyPressed(new EventHandler<KeyEvent>()
    {
        @Override
        public void handle(KeyEvent ke)
        {
            if (ke.getCode().equals(KeyCode.ENTER))
            {
                doSomething();
            }
        }
    });

J'espère que cela vous sera utile!

70
Brendan

Vous pouvez essayer ce qui suit:

@FXML
public void buttonPressed(KeyEvent e)
{
    if(e.getCode().toString().equals("ENTER"))
    {
        //do something
    }
}
7
ihayet

En utilisant simplement "expression lambda":

TextField textField = new TextField();
textField.setOnAction(e -> {
    // add your code to be run here
    System.out.println("textFile");
    });
4
mhmdar

Cela marche:

@FXML public TextField txt;

@FXML
public void textAction(KeyEvent e){

    if(e.getCode().equals(KeyCode.ENTER))
        System.out.println(txt.getText());
}

Si pour une raison quelconque .getCode () ne fonctionne pas, assurez-vous d'importer la bibliothèque:

import javafx.scene.input.KeyEvent;

NE PAS

import Java.awt.event.KeyEvent;

Je me suis rattrapé et c'était irritant. Je passe juste ceci pour tous ceux dans le même bateau.

1
Nevets17

Sur certains claviers, vous devez appliquer des tests supplémentaires aux caractères "\ n" et "\ r".

if(event.getCode().equals(KeyCode.ENTER) || event.getCharacter().getBytes()[0] == '\n' || event.getCharacter().getBytes()[0] == '\r') {
        // your action
    }
0
Ailton F. Silva