scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
if (ke.getCode() == KeyCode.SPACE) {
System.out.println("space pressed");
}
}
});
scene.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
if (ke.getCode() == KeyCode.SPACE) {
System.out.println("space released");
}
}
});
scene.setOnKeyTyped(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
if (ke.getCode() != KeyCode.SPACE) {
System.out.println("typed");
}
}
});
JavaFX KeyTyped事件与KeyPressed和KeyReleased事件冲突。
为什么我按空格键,也打印“键入”,这很奇怪。
谢谢!
答案 0 :(得分:2)
“键入类型”事件是更高级别的,通常不依赖于 平台或键盘布局。它们是在Unicode时生成的 输入字符,是了解的首选方式 字符输入。在最简单的情况下,生成键类型事件 通过单键按压(例如,'a')。然而,通常,角色是 由一系列按键(例如,SHIFT +'a')产生,以及映射 从按键事件到关键类型事件可以是多对一或 许多到很多。生成密钥通常不需要密钥发布 键入的事件,但在某些情况下,键入的事件不是 生成直到密钥被释放(例如,通过输入ASCII序列) Windows中的Alt-Numpad方法)。不会生成任何键类型事件 对于不生成Unicode字符的键(例如,操作键, 修饰键等。)。
char变量始终包含有效的Unicode字符或 CHAR_UNDEFINED。键输入事件报告字符输入;键 按下和键释放事件不一定与 字符输入。因此,char变量保证是 仅对键入事件有意义。
对于按键和键释放事件,代码变量包含 事件的关键代码。对于键类型事件,始终是代码变量 包含KeyCode.UNDEFINED。
“按下按键”和“按键释放”事件是较低级别依赖的 平台和键盘布局。只要一个键,就会生成它们 按下或释放,是了解密钥的唯一方法 不生成字符输入(例如,动作键,修饰键, 等等。)。按下或释放的键由代码指示 变量,包含虚拟键码。
基本上说,“按键式”事件是输入事件,而“按下按键”和“按键发布”事件是键盘事件。