JavaFx中BACKSPACE的键码事件

时间:2018-03-29 19:50:20

标签: java javafx java-8 gluon

我正在使用Java 8和Gluon scenebuilder在JavaFX中完成一个项目。我想检测backspaceTextField被按下的时间。这是我正在使用的代码:

public void keyPressed(KeyEvent kEvent) {
    if (kEvent.getCode() == KeyCode.BACK_SPACE) {
        System.out.println("Backspace pressed");
    }

此代码位于控制器文件内,名为FXMLDocumentController,用于控制GUI xml文件FXMLDocument。您可以从下图中看到,只要在TextField内输入密钥,就会调用该函数。这适用于所有字母/数字,但不适用于backspace

Gluon scene builder settings

理论上它应该有效,但事实并非如此。

如何管理backspace按钮的输入?

编辑:

请注意,在“窗口本身”(即AnchorPane)上将这个确切的函数放在元素的根上。问题在于阅读backspaceTextField的压力。您可以在下面的图片中看到我放置功能的地方:

On the window backspace's detecting works

2 个答案:

答案 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