32

我有一个 TextField 可以输入搜索词,还有一个“Go”按钮。但是在 JavaFX2 中,我将如何让它在 TextField 中按下 Enter 键来执行操作?

谢谢 :)

4

6 回答 6

79

我假设您希望仅当用户在TextField获得焦点时按 Enter 键时才会发生这种情况。你会想要使用KeyEventout of javafx.scene.inputpackage并做这样的事情:

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

使用 lambda:

field.setOnKeyPressed( event -> {
  if( event.getCode() == KeyCode.ENTER ) {
    doSomething();
  }
} );
于 2012-12-14T15:39:02.010 回答
42

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

@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" />
于 2012-12-14T15:44:53.697 回答
8

您可以尝试以下方法:

@FXML
public void buttonPressed(KeyEvent e)
{
    if(e.getCode().toString().equals("ENTER"))
    {
        //do something
    }
}
于 2015-10-22T17:34:11.387 回答
3

只需使用“lambda 表达式”:

TextField textField = new TextField();
textField.setOnAction(e -> {
    // add your code to be run here
    System.out.println("textFile");
    });
于 2016-12-27T09:13:52.940 回答
2

这有效:

@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;

我被赶上了这件事,这很烦人。我只是把这个传递给所有在同一条船上的人。

于 2016-10-20T19:45:10.170 回答
0

在某些键盘上,您必须对 '\n' 和 '\r' 字符进行额外测试。

if(event.getCode().equals(KeyCode.ENTER) || event.getCharacter().getBytes()[0] == '\n' || event.getCharacter().getBytes()[0] == '\r') {
        // your action
    }
于 2018-01-29T18:57:20.380 回答