У меня есть TextField, чтобы ввести поисковый запрос и кнопку "Go". Но в JavaFX2, как бы я сделал это так, нажатие клавиши ввода в TextField выполнило бы действие?
Спасибо:)
У меня есть TextField, чтобы ввести поисковый запрос и кнопку "Go". Но в JavaFX2, как бы я сделал это так, нажатие клавиши ввода в TextField выполнило бы действие?
Спасибо:)
Вы можете использовать атрибут onAction для TextField и привязать его к методу в вашем контроллере.
@FXML
public void onEnter(ActionEvent ae){
System.out.println("test") ;
}
И в вашем файле FXML:
<TextField fx:id="textfield" layoutX="29.0" layoutY="298.0" onAction="#onEnter" prefWidth="121.0" />
Я предполагаю, что вы хотите, чтобы это произошло, когда пользователь нажимает кнопку ввода, только когда TextField имеет фокус. Вы захотите использовать KeyEvent из javafx.scene.input и сделать что-то вроде этого...
textField.setOnKeyPressed(new EventHandler<KeyEvent>()
{
@Override
public void handle(KeyEvent ke)
{
if (ke.getCode().equals(KeyCode.ENTER))
{
doSomething();
}
}
});
Надеюсь, что это будет полезно!
Вы можете попробовать следующее:
@FXML
public void buttonPressed(KeyEvent e)
{
if(e.getCode().toString().equals("ENTER"))
{
//do something
}
}
Просто используя "лямбда-выражение":
TextField textField = new TextField();
textField.setOnAction(e -> {
// add your code to be run here
System.out.println("textFile");
});
Это работает:
@FXML public TextField txt;
@FXML
public void textAction(KeyEvent e){
if(e.getCode().equals(KeyCode.ENTER))
System.out.println(txt.getText());
}
Если по какой-то причине .getCode() не работает, убедитесь, что вы импортируете библиотеку:
import javafx.scene.input.KeyEvent;
НЕ
import java.awt.event.KeyEvent;
Я догнал это, и это раздражало. Я просто передаю это всем тем, кто находится в одной лодке.