Events 为什么事件筛选器中的KeyEvent上的consume()不起作用?

Events 为什么事件筛选器中的KeyEvent上的consume()不起作用?,events,javafx,consuming,Events,Javafx,Consuming,我想过滤一些字符,例如文本字段中的字母“a”。我明确不想使用建议的TextFormatter/setTextFormatter()执行此任务 下面的代码示例应该在事件发送链上的事件到达TextField节点之前实际使用该事件,TextField节点是父节点的子节点,但它不是。当然,如果我在textfield节点本身设置过滤器,也会发生同样的情况 为什么? 啊,真奇怪,好像是KeyEvent。按下的键不足以处理所有调度的事件。 如果我使用更通用的KeyEvent.ANY,则以下代码有效:

我想过滤一些字符,例如文本字段中的字母“a”。我明确不想使用建议的TextFormatter/setTextFormatter()执行此任务

下面的代码示例应该在事件发送链上的事件到达TextField节点之前实际使用该事件,TextField节点是父节点的子节点,但它不是。当然,如果我在textfield节点本身设置过滤器,也会发生同样的情况

为什么?


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

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

_我明确地不想使用推荐的TextFormatter uuWhy not?因为我想了解事件处理lol,这就是为什么。在本例中,使用TextFormatter很容易,但不是问题……啊,我明白了,但是你的答案并没有真正帮助你(在完全理解事件处理方面:)无论如何,你应该编辑你的问题:学术练习是完全有效的,但是如果一个问题是关于它们的,那么应该在问题中明确说明这就是我为什么要写的原因“理解事件处理”而不是“完全理解”“。彻底阅读问题/评论可避免不必要的讨论…;-)您不需要
任何
,只需要生成输入的类型,即表示char;)请给我一个代码示例,这样我就能明白你的意思了,thx.Text输入控件使用
KEY\u TYPED
进行字符输入,因为这是唯一返回有意义内容的事件类型。尽管它对其他按键事件(如退格键、回车键、箭头键等)使用了
按键\u PRESSED
。您可以在内部行为类中看到事件处理代码:
    TextField tf = new TextField();
    tf.addEventFilter(KeyEvent.ANY, event -> {
        if (event.getCharacter().matches("[aA]"))
            event.consume();
    });