将按钮方法绑定到ENTER键

问题描述 投票:1回答:4

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

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

java button javafx binding scenebuilder
4个回答
6
投票

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


Scenebuilder / FXML

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

Scenebuilder example

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


Programmatically

在你的控制器中,你需要将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键以模拟按下该按钮(从而执行其侦听器)。此外,按钮上会应用略带蓝色的重音,以显示它是默认按钮。


2
投票

只需将onActionButtonTextFieldPasswordField事件处理程序设置为相同的事件处理程序方法。如果其中一个控件被聚焦并且如果单击该按钮也被触发,则在输入时触发此处理程序:

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

Controller class

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

1
投票

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

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

-3
投票

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

theButton.setMnemonic(KeyEvent.VK_ENTER);
© www.soinside.com 2019 - 2024. All rights reserved.