JavaFx 中 BACKSPACE 的键码事件

Keycode event for BACKSPACE in JavaFx

我正在 JavaFX 中做一个项目,使用 Java 8 和 Gluon scenebuilder。我想检测何时在 TextField 中按下 backspace。这是我使用的代码:

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

此代码位于名为 FXMLDocumentController 的控制器文件中,该文件控制 GUI xml 文件 FXMLDocument。您可以从下图中看到,只要在 TextField 中键入一个键,就会调用该函数。这适用于所有 letters/numbers,但不适用于 backspace.

Gluon scene builder settings

理论上它应该有效,但实际上无效。

如何管理 backspace 按钮的输入?

编辑:

请注意,将这个确切的函数放在元素的根部,在 "Window itself"(即 AnchorPane)上是有效的。问题在于读取 TextFieldbackspace 的按下。您可以在下图中看到我放置函数的位置:

On the window backspace's detecting works

在您的 SceneBuilder 的屏幕截图中,我可以看到您正在使用 On Key Typed 引用 keyPressed(KeyEvent kEvent) 控制器方法,而不是开键按下.

对于 KeyEvent.KEY_TYPED 的事件,getCode() 的值始终是 KeyCode.UNDEFINED


编辑: 我回到这个答案并重新阅读了你的问题。我想澄清一点,但我上面说的仍然是正确的。

在您的编辑中,您提到 "exact" 相同的设置适用于 AnchorPane,但在查看您的屏幕截图时,存在一些差异。对于您的 AnchorPane,您具有针对 所有三种类型 引用的控制器方法:按下按键、释放按键和键入按键。

这意味着每次击键最多应调用该方法 3 次(当事件到达 AnchorPane 时)。按下一次,键入一次(如果该键能够发送键入的事件 - 请参阅 Sedrick 的 进行澄清),然后释放一次。因此,方法 用于 pressedreleased 事件,但它 不会typed 事件工作。

换句话说,您的代码适用于 AnchorPane 但不适用于 TextField 的原因是因为您为 AnchorPane 而不是 TextField 正确配置了它.

您应该在 on key pressedon key released 中使用您的 keyPressed 方法。

Docs 中指出:

No key typed events are generated for keys that don't generate Unicode characters (e.g., action keys, modifier keys, etc.).

Backspace 被认为是 Action Key.