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

如何在JavaFX2中选择按下的Enter键?,java,user-interface,javafx-2,javafx,Java,User Interface,Javafx 2,Javafx,我有一个文本字段来输入搜索词,还有一个“Go”按钮。但是在JavaFX2中,我如何使按下TextField中的Enter键可以执行一个操作呢 谢谢:)我假设当用户只在文本字段有焦点时按enter键时,您希望发生这种情况。您需要使用javafx.scene.input包中的KeyEvent并执行如下操作: field.setOnKeyPressed(new EventHandler<KeyEvent>() { @Override public void handle(K

我有一个文本字段来输入搜索词,还有一个“Go”按钮。但是在JavaFX2中,我如何使按下TextField中的Enter键可以执行一个操作呢


谢谢:)

我假设当用户只在
文本字段有焦点时按enter键时,您希望发生这种情况。您需要使用
javafx.scene.input
包中的
KeyEvent
并执行如下操作:

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

您可以使用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" />

您可以尝试以下方法:

@FXML
public void buttonPressed(KeyEvent e)
{
    if(e.getCode().toString().equals("ENTER"))
    {
        //do something
    }
}
这项工作:

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

我被这件事缠住了,很恼人。我只是把这句话传给同一条船上的所有人。

简单地用“lambda表达式”:

TextField textField = new TextField();
textField.setOnAction(e -> {
    // add your code to be run here
    System.out.println("textFile");
    });

在某些键盘上,您必须对“\n”和“\r”字符进行附加测试

if(event.getCode().equals(KeyCode.ENTER) || event.getCharacter().getBytes()[0] == '\n' || event.getCharacter().getBytes()[0] == '\r') {
        // your action
    }

是的,onAction方法似乎是一种方法:->+1,但是当从FXML“绑定”时,需要用@FXML注释onEnter()方法,并且它必须采用ActionEvent参数,AFAIK。注意,我必须添加
(ActionEvent ActionEvent)
作为
onEnter
上的一个参数,它才起作用。Javadoc是此类问题的一个很好的来源:Aaah Stack Overflow,俗话说:“给一个人一条鱼,他们吃一天,但教他们钓鱼,他们吃一辈子。”但常见的SO回答更多地是这样的:“我说,好先生,有一个地方有书,查钓鱼,努力学习和练习,两个月后你就可以吃饭了。”用意很好,但没用。更好的用法:
ke.getCode()==KeyCode.ENTER
因为它是一个枚举。光是它是不起作用的,FXML是用来做什么的?
TextField textField = new TextField();
textField.setOnAction(e -> {
    // add your code to be run here
    System.out.println("textFile");
    });
if(event.getCode().equals(KeyCode.ENTER) || event.getCharacter().getBytes()[0] == '\n' || event.getCharacter().getBytes()[0] == '\r') {
        // your action
    }