我正在使用Java 8和Gluon scenebuilder在JavaFX中完成一个项目。我想检测backspace
内TextField
被按下的时间。这是我正在使用的代码:
public void keyPressed(KeyEvent kEvent) {
if (kEvent.getCode() == KeyCode.BACK_SPACE) {
System.out.println("Backspace pressed");
}
此代码位于控制器文件内,名为FXMLDocumentController
,用于控制GUI xml文件FXMLDocument
。您可以从下图中看到,只要在TextField
内输入密钥,就会调用该函数。这适用于所有字母/数字,但不适用于backspace
。
理论上它应该有效,但事实并非如此。
如何管理backspace
按钮的输入?
编辑:
请注意,在“窗口本身”(即AnchorPane
)上将这个确切的函数放在元素的根上。问题在于阅读backspace
内TextField
的压力。您可以在下面的图片中看到我放置功能的地方:
答案 0 :(得分:3)
在SceneBuilder的屏幕截图中,我可以看到您使用 On Key 键入 而非 On Key 引用keyPressed(KeyEvent kEvent)
控制器方法压强> 的
对于KeyEvent.KEY_TYPED
的事件,getCode()
的值始终为KeyCode.UNDEFINED
。
修改:我回到了这个答案并重新阅读了您的问题。我想澄清一些事情,但我上面所说的仍然是正确的。
在你的编辑中你提到"确切"相同的设置适用于AnchorPane
,但在查看屏幕截图时存在一些差异。对于AnchorPane
,您有所有三种类型引用的控制器方法:On Key Pressed,On Key Released和On Key Typed。
这意味着每次击键时应该最多调用该方法3次(当事件到达AnchorPane
时)。一旦被按下,一旦键入(如果键能够发送键入的事件 - 请参阅Sedrick的answer以获得澄清),然后一次用于释放。因此,方法将用于按下和已发布的事件,但赢了为键入的事件工作。
换句话说,您的代码适用于AnchorPane
而非TextField
的原因是因为您为AnchorPane
而非TextField
正确配置了它。< / p>
答案 1 :(得分:3)
您应该在echo {{ var.value.DayVersion or 'Day' }}
或keyPressed
中使用on key pressed
方法。
在Docs中,它声明:
不会为不生成Unicode的密钥生成密钥类型事件 字符(例如,操作键,修饰键等)。
Backspace 被视为on key released
。