【问题标题】:Run same function when clicking and pressing enter key单击并按下回车键时运行相同的功能
【发布时间】:2019-04-17 08:39:39
【问题描述】:

我有这个功能在单击按钮时运行,但我想在按下回车时运行相同的功能。我该怎么做?

@FXML
public void login(ActionEvent event) throws IOException {
    if(txtUName.getText().equals("jesse") && txtPass.getText().equals("essej")){
        Parent home;
        try {
            home = FXMLLoader.load(getClass().getResource("Home.fxml"));
            Scene homeScene = new Scene(home);

            Stage window = (Stage)((Node)event.getSource()).getScene().getWindow();

            window.setScene(homeScene);

            window.show();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }else {
        lblError.setVisible(true);
    }
} 

【问题讨论】:

标签: java javafx scenebuilder


【解决方案1】:

您需要一个关键事件,然后应该检查该事件是否是“输入”被推送的。

Detecting when user presses enter in Java

【讨论】:

  • 是否可以在同一个函数中做到这一点,而不是为 ActionEvent 和一个 KeyEvent 制作两个函数。
  • AFAIK 这是不可能的,但您可以创建一个单独的函数来包含所有逻辑,然后在两个事件处理程序中调用它。
  • 重新考虑可能会更改处理程序的签名以接收Event 对象而不是ActionEvent,以便您可以将其分配给鼠标和按键事件。
  • @Gnas 提取逻辑并从每个处理程序中调用它是可行的方法,不需要花哨的东西:这只是在其他场合引入错误的额外工作;)
  • @kleopatra 是的,我同意。
【解决方案2】:

你的意思是你有另一个@FXML 函数想要做同样的事情?只需将您的逻辑放在一个单独的函数中,然后从您的事件函数中调用它。

@FXML
public void buttonPressed(MouseEvent event) {
    doSomething(event);
}

@FXML
public void keyPressed(KeyEvent event) {
    doSomething(event);
}

private void doSomething(InputEvent event) {
    // your code here
}

此 KeyEvent 和 MouseEvent 继承自 InputEvent。您仍然可以调用 .getSource(),因为它是继承的,并且在您显示的代码中,您对事件没有更具体的操作。

【讨论】:

    【解决方案3】:

    我找到了适合我的解决方案。

    您可以在 Scene Builder 中将按钮设置为默认按钮,这样当您按下回车键时,它也会激活该方法。

    【讨论】:

      猜你喜欢
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多