events - 为什么在事件过滤器中的 KeyEvent 上的 consume() 不起作用?
问题描述
我想过滤一些字符,即文本字段中的字母“a”。我明确不想为此任务使用推荐的TextFormatter / setTextFormatter() 。
下面的代码示例实际上应该在事件调度链上的事件到达 TextField 节点之前消耗它,它是parentNode的子节点,但它没有。当然,如果我在文本字段节点本身上设置过滤器,也会发生同样的情况。
为什么?
parentNode.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode() == KeyCode.A) {
event.consume();
}
});
解决方案
啊,真的很奇怪,好像KeyEvent.KEY_PRESSED不足以处理所有调度的事件。如果我使用更通用的KeyEvent.ANY而不是以下代码:
TextField tf = new TextField();
tf.addEventFilter(KeyEvent.ANY, event -> {
if (event.getCharacter().matches("[aA]"))
event.consume();
});
推荐阅读
- charts - 如何向 Chart.js 甜甜圈图显示第二组标签?
- excel - 如何从传递的变量类型不同的函数返回值
- mysql - 带有“”,:,{,[的长文本数据未插入表中
- flutter - 如何在单击图标按钮小部件的位置显示弹出菜单
- javascript - 如何在没有绘图功能的情况下更改谷歌图表背景颜色
- android - 我应该如何使用改造来获取数组下的图像
- javascript - 无法使用 background.js 打开新窗口
- php - 我没有收到 CURL 通过 POST 发送的数据
- c# - Linq 高级分组 + 计数到新模型
- android - 无法通过我的应用在 android 电视中播放 youtube 视频 - “需要更新服务版本”