如何选择在JavaFX2中按下的Enter键?

Gee*_*_SO 28 java user-interface javafx javafx-2

我有一个TextField来输入搜索词,还有一个"Go"按钮.但是在JavaFX2中,如何按下TextField中的Enter键来执行操作?

谢谢 :)

Bre*_*dan 71

我假设您希望在用户仅在TextField具有焦点时按Enter键时发生这种情况.你需要使用javafx.scene.input中的KeyEvent并做这样的事情......

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

希望这有用!

  • 请注意,使用Java拉姆达符号当上述代码可以写为:`textArea.setOnKeyPressed((事件) - > {如果(event.getCode()== KeyCode.ENTER){doSomething的();}});` (7认同)
  • 我认为这比必须使用FXML更好。 (2认同)

Wot*_*els 33

您可以使用TextField的onAction属性并将其绑定到控制器中的方法.

@FXML
public void onEnter(ActionEvent ae){
   System.out.println("test") ;
}
Run Code Online (Sandbox Code Playgroud)

在你的FXML文件中:

<TextField fx:id="textfield" layoutX="29.0" layoutY="298.0" onAction="#onEnter" prefWidth="121.0" />
Run Code Online (Sandbox Code Playgroud)

  • 是的,onAction方法似乎是要走的路:http://docs.oracle.com/javafx/2/api/javafx/scene/control/TextField.html#onActionProperty - > +1但你需要注释当从FXML"绑定"时,使用@FXML的onEnter()方法,它必须采用ActionEvent参数,AFAIK. (3认同)

iha*_*yet 7

您可以尝试以下方法:

@FXML
public void buttonPressed(KeyEvent e)
{
    if(e.getCode().toString().equals("ENTER"))
    {
        //do something
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 更好用:`ke.getCode()== KeyCode.ENTER`,因为它是一个枚举 (10认同)