在 JavaFX 中为 TextField 设置 KeyPressed 事件
Set KeyPressed event for a TextField in JavaFX
我在名为对话框的弹出 window 中有 TextField
个对象(类型:Stage
)。
我正在尝试为他们定义一个动作处理程序,目的是在单击键盘上的退出按钮后关闭舞台。
这是我的舞台闭幕功能:
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
文档指出:
The action handler associated with this text field, or null if no action handler is assigned. The action handler is normally called
when the user types the ENTER key.
因此,escapeKeyPressed
将在 Enter
键按下时执行。现在会发生什么:如果你按 Enter 键,它会用 KeyCode.ESCAPE
调用这个方法,因此它会关闭对话框。
使用setOnKeyPressed
而不是setOnAction
:
Defines a function to be called when this Node or its child Node has
input focus and a key has been pressed.
而不是传递 KeyCode.ESCAPE
,传递 KeyEvent
的 KeyCode
你可以用 getCode()
:
textUsername.setOnKeyPressed(event -> escapeKeyPressed(event.getCode(), dialog));
我在名为对话框的弹出 window 中有 TextField
个对象(类型:Stage
)。
我正在尝试为他们定义一个动作处理程序,目的是在单击键盘上的退出按钮后关闭舞台。
这是我的舞台闭幕功能:
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
文档指出:
The action handler associated with this text field, or null if no action handler is assigned. The action handler is normally called when the user types the ENTER key.
因此,escapeKeyPressed
将在 Enter
键按下时执行。现在会发生什么:如果你按 Enter 键,它会用 KeyCode.ESCAPE
调用这个方法,因此它会关闭对话框。
使用setOnKeyPressed
而不是setOnAction
:
Defines a function to be called when this Node or its child Node has input focus and a key has been pressed.
而不是传递 KeyCode.ESCAPE
,传递 KeyEvent
的 KeyCode
你可以用 getCode()
:
textUsername.setOnKeyPressed(event -> escapeKeyPressed(event.getCode(), dialog));