首页 > 解决方案 > 为什么在事件过滤器中的 KeyEvent 上的 consume() 不起作用?

问题描述

我想过滤一些字符,即文本字段中的字母“a”。我明确不想为此任务使用推荐的TextFormatter / setTextFormatter() 。

下面的代码示例实际上应该在事件调度链上的事件到达 TextField 节点之前消耗它,它是parentNode的子节点,但它没有。当然,如果我在文本字段节点本身上设置过滤器,也会发生同样的情况。

为什么?

    parentNode.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
        if (event.getCode() == KeyCode.A) {
            event.consume();
        }
    });

标签: eventsjavafxconsuming

解决方案


啊,真的很奇怪,好像KeyEvent.KEY_PRESSED不足以处理所有调度的事件。如果我使用更通用的KeyEvent.ANY而不是以下代码:

    TextField tf = new TextField();
    tf.addEventFilter(KeyEvent.ANY, event -> {
        if (event.getCharacter().matches("[aA]"))
            event.consume();
    });

推荐阅读