【问题标题】:Binding a button method to ENTER key将按钮方法绑定到 ENTER 键
【发布时间】:2018-10-03 11:06:40
【问题描述】:

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

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

【问题讨论】:

  • 您可以通过将输入按钮的类型声明为“提交”来实现。此外,请确保您的整个 UI(包括文本字段和按钮)都包含在
    标记内。
  • @rohankangale 是 java 吗?
  • 没有。它应该在您的 UI/前端部分。即在您的 HTML 代码中。
  • @rohankangale 他不使用 HTML,他正在使用 JavaFX。
  • 如何阅读您正在使用的类的 api 文档... ;)

标签: java button javafx binding scenebuilder


【解决方案1】:

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

theButton.setMnemonic(KeyEvent.VK_ENTER);

【讨论】:

【解决方案2】:

我想您正在寻找“默认按钮”。您可以通过编程方式或在 Scenebuilder / FXML 中进行设置。


场景构建器/FXML

在 Scenebuilder 中打开您的场景。然后选择要绑定 Enter 的按钮。现在您可以在Properties : Button > Specific 下的右侧面板上勾选“默认按钮”。点击保存就可以了。

这将在 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 来模拟对该按钮的按下(从而执行其侦听器)。此外,按钮上应用了轻微的蓝色调,以使其明显是默认按钮。

【讨论】:

  • 或者代码中的Button#setDefaultButton(true),或者FXML中的<Button defaultButton="true" />
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

    控制器类

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

    【讨论】:

    • 可能...但违反始终使用可用的最高抽象规则..
    猜你喜欢
    • 2014-03-23
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多