我目前正在处理的程序中存在问题。该程序使用登录系统,我有一个文本字段,一个密码字段和两个按钮(登录和退出)。
我想将ENTER键绑定到“登录”按钮,这样无论它关注什么,如果我按下当前场景中的ENTER键,它将按下“登录”按钮。请记住,它仍然需要对鼠标点击做出反应。
答案 0 :(得分:5)
我想你正在寻找一个“默认按钮”。您可以以编程方式设置,也可以在Scenebuilder / FXML中设置。
在Scenebuilder中打开场景。然后选择要绑定的按钮 Enter to。现在,您可以在属性:按钮>下的右侧面板上勾选“默认按钮”。具体。点击保存,就是这样。
这将在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)
只需将onAction
,Button
和TextField
的{{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);