我有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));