【问题标题】:JavaFX KeyTypedEvent conflit with KeyPressed and KeyReleasedEventJavaFX KeyTyped 事件与 KeyPress 和 KeyRelease 事件冲突
【发布时间】:2014-06-02 03:47:23
【问题描述】:
    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 KeyTypedEvent 与 KeyPressed 和 KeyReleasedEvent 冲突。

为什么我按空格键,还打印“Typed”,很奇怪。

谢谢!

【问题讨论】:

    标签: java javafx keyevent typed


    【解决方案1】:

    引用Java Documentation

    “键类型”事件是更高级别的,通常不依赖于 平台或键盘布局。它们是在 Unicode 时生成的 字符被输入,并且是查找的首选方式 字符输入。在最简单的情况下,会产生一个键类型事件 通过单次按键(例如,“a”)。然而,字符通常是 由一系列按键(例如,SHIFT + 'a')和映射产生 从按键事件到按键类型事件可能是多对一或 多对多。生成密钥通常不需要密钥释放 typed 事件,但在某些情况下,key typed 事件不是 生成直到释放一个键(例如,通过输入 ASCII 序列 Windows 中的 Alt-Numpad 方法)。不生成键类型事件 对于不生成 Unicode 字符的键(例如,操作键, 修饰键等)。

    char 变量始终包含有效的 Unicode 字符或 CHAR_UNDEFINED。字符输入由按键输入事件报告;钥匙 按下和释放键事件不一定与 字符输入。因此,char 变量保证为 仅对键类型事件有意义。

    对于按键按下和按键释放事件,代码变量包含 事件的关键代码。对于键类型事件,代码变量总是 包含 KeyCode.UNDEFINED。

    “按键”和“按键释放”事件是较低级别的,取决于 平台和键盘布局。每当有密钥时就会生成它们 按下或释放,并且是找出键的唯一方法 不生成字符输入(例如,操作键、修饰键、 ETC。)。按下或释放的键由代码指示 变量,包含一个虚拟键码。

    基本上说,“键输入”事件是输入事件,而“键按下”和“键释放”事件是键盘事件。

    【讨论】:

    • 非常感谢!我现在用 KeyReleased 事件代替 KeyTyped 事件,没关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    相关资源
    最近更新 更多