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 :)
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" />
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!
Vous pouvez essayer ce qui suit:
@FXML
public void buttonPressed(KeyEvent e)
{
if(e.getCode().toString().equals("ENTER"))
{
//do something
}
}
En utilisant simplement "expression lambda":
TextField textField = new TextField();
textField.setOnAction(e -> {
// add your code to be run here
System.out.println("textFile");
});
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.
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
}