将按钮方法绑定到 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);
只需将 Button
、TextField
和 PasswordField
的 onAction
事件处理程序设置为相同的事件处理程序方法。此处理程序在 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
}
我目前正在处理的程序有问题。该程序带有一个登录系统,其中我有一个文本字段、一个密码字段和两个按钮(登录和退出)。
我想把回车键绑定到"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);
只需将 Button
、TextField
和 PasswordField
的 onAction
事件处理程序设置为相同的事件处理程序方法。此处理程序在 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
}