在JavaFX中为TextField设置KeyPressed事件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JavaFX中为TextField设置KeyPressed事件相关的知识,希望对你有一定的参考价值。
我在一个名为dialog的弹出窗口中有许多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 );});
问题是函数没有被调用。
知道怎么解决这个问题?值得一提的是,如果我用qazxsw poi替换衣领,这个功能本身就能正常工作
答案
setOnAction();
的setOnAction
文档指出:
与此文本字段关联的操作处理程序,如果未分配操作处理程序,则为null。通常在用户键入ENTER键时调用操作处理程序。
因此,TextField
将在escapeKeyPressed
按键上执行。现在会发生什么:如果按Enter键,它将使用Enter
调用此方法,因此它将关闭对话框。
使用KeyCode.ESCAPE
而不是setOnKeyPressed
:
定义当此节点或其子节点具有输入焦点并且已按下某个键时要调用的函数。
而不是通过setOnAction
,传递KeyCode.ESCAPE
的KeyCode
你可以用KeyEvent
获得:
getCode()
以上是关于在JavaFX中为TextField设置KeyPressed事件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Scenebuilder 中为空的 TextField 输入添加错误弹出窗口
是否可以为 javafx textField/Area 中的不同行设置不同的颜色?