在JavaFX中设置TextField的按键事件



我有TextField对象的数量在一个弹出窗口称为对话框(类型:Stage)。

我试图为他们定义一个动作处理程序,目的是一旦在键盘上单击escape按钮就关闭舞台。

这是我的舞台拉近器的函数:

public void escapeKeyPressed(KeyCode keyCode , Stage dialog){
    if (keyCode == KeyCode.ESCAPE ){
        dialog.close();
        System.out.println("escape got called");
    }
} 

下面是我调用它的地方:

textUsername.setOnAction((event) -> {escapeKeyPressed(KeyCode.ESCAPE ,dialog );});
textAddress.setOnAction((event) -> {escapeKeyPressed(KeyCode.ESCAPE ,dialog );});
textwp.setOnAction((event) -> {escapeKeyPressed(KeyCode.ESCAPE ,dialog );});
textState.setOnAction((event) -> {escapeKeyPressed(KeyCode.ESCAPE ,dialog );});
textloginName.setOnAction((event) -> {escapeKeyPressed(KeyCode.ESCAPE ,dialog );});

问题是函数没有被调用。

知道我该怎么解决这个问题吗?值得一提的是,如果我替换setOnAction();

的调用者,该函数本身工作良好

TextField状态的setOnAction文档:

与此文本字段关联的操作处理程序,如果没有分配操作处理程序,则为空。操作处理程序通常被调用

因此,按下Enter键后将执行escapeKeyPressed。现在会发生什么:如果你按下Enter键,它会用KeyCode.ESCAPE调用这个方法,因此它会关闭对话框。

使用setOnKeyPressed而不是setOnAction:

定义一个函数,当此节点或其子节点有输入焦点并按下某个键

与其传递KeyCode.ESCAPE,不如传递KeyEvent中的KeyCode,你可以从getCode()中得到什么:

textUsername.setOnKeyPressed(event -> escapeKeyPressed(event.getCode(), dialog));

相关内容

  • 没有找到相关文章

最新更新