将按钮方法绑定到ENTER键

时间:2018-04-23 11:53:51

标签: java button javafx binding scenebuilder

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

我想将ENTER键绑定到“登录”按钮,这样无论它关注什么,如果我按下当前场景中的ENTER键,它将按下“登录”按钮。请记住,它仍然需要对鼠标点击做出反应。

4 个答案:

答案 0 :(得分:5)

我想你正在寻找一个“默认按钮”。您可以以编程方式设置,也可以在Scenebuilder / FXML中设置。

Scenebuilder / FXML

在Scenebuilder中打开场景。然后选择要绑定的按钮 Enter to。现在,您可以在属性:按钮>下的右侧面板上勾选“默认按钮”。具体。点击保存,就是这样。

Scenebuilder example

这将在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 来模拟按下该按钮(从而执行其监听器)。此外,按钮上会显示略带蓝色的重音,以显示它是默认按钮。

答案 1 :(得分:2)

只需将onActionButtonTextField的{​​{1}}事件处理程序设置为相同的事件处理程序方法。如果其中一个控件被聚焦并且如果单击该按钮也被触发,则在 enter 上触发此处理程序:

PasswordField

控制器类

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

答案 2 :(得分:1)

除了上面的答案,您可以尝试直接将侦听器放在场景上以处理场景中的多个键。

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

答案 3 :(得分:-3)

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

theButton.setMnemonic(KeyEvent.VK_ENTER);