【问题标题】:How do I pick up the Enter Key being pressed in JavaFX2?如何获取在 JavaFX 2 中按下的 Enter 键?
【发布时间】:2012-12-02 13:41:02
【问题描述】:

我有一个用于输入搜索词的 TextField 和一个用于“Go”的按钮。但是在 JavaFX2 中,我该如何让它在 TextField 中按 Enter 键来执行操作?

谢谢:)

【问题讨论】:

  • Javadoc 是解决此类问题的好来源:docs.oracle.com/javafx/2/api/javafx/scene/control/…
  • Aaah Stack Overflow,俗话说:“授人以鱼,食一日,授人以渔,食一生。”但一个常见的 SO 回应更像是:“我说,好先生,有一个有书的地方,看看钓鱼,努力学习和练习,2 个月后你可以吃饭了。”好心,但没用。

标签: java user-interface javafx-2 javafx


【解决方案1】:

我假设您希望仅在 TextField 具有焦点时用户按 Enter 键时发生这种情况。您需要使用 KeyEvent 包中的 KeyEvent 并执行以下操作:

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();
  }
} );

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      只需使用 “lambda 表达式”:

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

      【讨论】:

        【解决方案4】:

        这行得通:

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

        我被这件事吸引住了,这很烦人。我只是为所有在同一条船上的人传递这个。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 是的,onAction 方法似乎是要走的路:docs.oracle.com/javafx/2/api/javafx/scene/control/… -> +1 但是当从 FXML “绑定”时,你需要用 @FXML 注释 onEnter() 方法,它有采用 ActionEvent 参数,AFAIK。
          • 请注意,我必须在 onEnter 上添加 (ActionEvent actionEvent) 作为参数才能工作。
          【解决方案6】:

          您可以尝试以下方法:

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

          【讨论】:

          • 更好用:ke.getCode() == KeyCode.ENTER,因为它是一个枚举
          • 单靠这个不行,这个的FXML是什么?
          猜你喜欢
          • 2014-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-06
          • 1970-01-01
          • 2017-01-08
          • 1970-01-01
          相关资源
          最近更新 更多