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
)上是有效的。问题在于读取 TextField
中 backspace
的按下。您可以在下图中看到我放置函数的位置:
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 的 进行澄清),然后释放一次。因此,方法 将 用于 pressed 和 released 事件,但它 不会 为 typed 事件工作。
换句话说,您的代码适用于 AnchorPane
但不适用于 TextField
的原因是因为您为 AnchorPane
而不是 TextField
正确配置了它.
您应该在 on key pressed
或 on 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
.
我正在 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
)上是有效的。问题在于读取 TextField
中 backspace
的按下。您可以在下图中看到我放置函数的位置:
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 的
换句话说,您的代码适用于 AnchorPane
但不适用于 TextField
的原因是因为您为 AnchorPane
而不是 TextField
正确配置了它.
您应该在 on key pressed
或 on 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
.