将按钮方法绑定到 ENTER 键

Binding a button method to ENTER key

我目前正在处理的程序有问题。该程序带有一个登录系统,其中我有一个文本字段、一个密码字段和两个按钮(登录和退出)。

我想把回车键绑定到"Login"按钮上,这样无论它关注什么,如果我在当前场景下按回车键,它都会按下"Login" 按钮。请记住,它仍然需要对鼠标点击做出反应。

通过javax.swing.JButton#setMnemonic()的方法,您可以轻松地将这些按钮设置为Swing中的一个键,如下所示:

theButton.setMnemonic(KeyEvent.VK_ENTER);

我想您正在寻找 "Default Button"。您可以通过编程方式或在 Scenebuilder / FXML 中进行设置。


场景生成器/FXML

在 Scenebuilder 中打开场景。然后 select 您要绑定的按钮 Enter 到。现在您可以在 属性下的右侧面板中勾选 "Default Button":按钮 > 特定 。点击保存就可以了。

这将在 FXML 中将 defaultButton="true" 属性添加到 <Button> 标记。


以编程方式

在您的控制器中,您需要将 Button#setDefaultButton(boolean) 设置为 true。您可能希望在控制器的初始化阶段执行此操作。

示例控制器:

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;

import java.net.URL;
import java.util.ResourceBundle;

public class Controller implements Initializable
{
    @FXML
    private Button button;

    @Override
    public void initialize(URL location, ResourceBundle resources)
    {
        button.setDefaultButton(true);
    }
}

您现在可以在场景中的任意位置按 Enter 来模拟按下该按钮(从而执行其侦听器)。此外,该按钮应用了轻微的蓝色调,以使其明显表明它是默认按钮。

除了上面的回答,你可以试试直接把listener放在场景上,来处理一个场景上的多个key

yourScene.addEventFilter(KeyEvent.KEY_RELEASED, //handle event accorddingly);

只需将 ButtonTextFieldPasswordFieldonAction 事件处理程序设置为相同的事件处理程序方法。此处理程序在 enter 时触发,如果其中一个控件获得焦点并且也被触发,如果单击按钮:

...
<TextField fx:id="userName" onAction="#submit"/>
...
<PasswordField fx:id="password" onAction="#submit"/>
...
<Button fx:id="loginButton" onAction="#submit"/>

控制器class

@FXML
private void submit() {
    // TODO: login
}