I have a TextField to enter a search term, and a button for "Go". But in JavaFX2, how would I make it so pressing the Enter Key in the TextField would perform an action?
Thanks :)
I have a TextField to enter a search term, and a button for "Go". But in JavaFX2, how would I make it so pressing the Enter Key in the TextField would perform an action?
Thanks :)
I'm assuming you want this to happen when the user presses enter only while the TextField
has focus. You'll want use KeyEvent
out of javafx.scene.input
package and do something like this:
field.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
if (ke.getCode().equals(KeyCode.ENTER)) {
doSomething();
}
}
});
Using lambda:
field.setOnKeyPressed( event -> {
if( event.getCode() == KeyCode.ENTER ) {
doSomething();
}
} );
You can use the onAction attribute of the TextField and bind it to a method in your controller.
@FXML
public void onEnter(ActionEvent ae){
System.out.println("test") ;
}
And in your FXML file:
<TextField fx:id="textfield" layoutX="29.0" layoutY="298.0" onAction="#onEnter" prefWidth="121.0" />
You can try the following:
@FXML
public void buttonPressed(KeyEvent e)
{
if(e.getCode().toString().equals("ENTER"))
{
//do something
}
}
Simply using "lambda expression" :
TextField textField = new TextField();
textField.setOnAction(e -> {
// add your code to be run here
System.out.println("textFile");
});
This works:
@FXML public TextField txt;
@FXML
public void textAction(KeyEvent e){
if(e.getCode().equals(KeyCode.ENTER))
System.out.println(txt.getText());
}
If for some reason .getCode() is not working, make sure you import the library:
import javafx.scene.input.KeyEvent;
NOT
import java.awt.event.KeyEvent;
I got caught up on this and it was irritating. Im just passing this on for all those in the same boat.
On some keyboards you have to put additional tests to the '\n' and '\r' characters.
if(event.getCode().equals(KeyCode.ENTER) || event.getCharacter().getBytes()[0] == '\n' || event.getCharacter().getBytes()[0] == '\r') {
// your action
}