【问题标题】:Disable character removing keys in a JavaFX TextField禁用 JavaFX TextField 中的字符删除键
【发布时间】:2016-01-19 08:02:36
【问题描述】:

标题几乎说明了一切。我需要禁用 JavaFX TextField 中的字符删除键。删除字符键是指 DEL 和 SUPPR。

现在,这就是我所拥有的:

mytextfield.addEventFilter(KeyEvent.KEY_TYPED, new EventHandler<KeyEvent>() {
        public void handle(KeyEvent event) {          
            if (event.getCharacter().matches("[0-9]")) {
                // some stuff that works perfectly here
            }
            event.consume(); // to cancel everything but 0-9 keys
        }
    });

但由于某种原因,即使事件被消耗,按下删除时结束字符仍然会被删除。

感谢您的宝贵时间!

【问题讨论】:

  • 我想到的第一个想法是:将TextField#getText 保存到(本地)变量并在使用后恢复它(如果没有添加数字)。
  • 如果我捕捉到 DELETE 键事件,对我有用。请提供 MCVE。
  • @Roland 调用了 handle(KeyEvent) 方法,但即使事件被消费,最后一个字符仍然会被删除。我给你的 sn-p 和我用的一样少
  • 这不完整

标签: java javafx textfield


【解决方案1】:

KEY_TYPED 只会在按下生成 UTF 输出的键后触发事件。 KEY_TYPED 事件不会在 BACK_SPACEDELETE 键按下时生成。请改用 KEY_PRESSED 事件。

mytextfield.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
        public void handle(KeyEvent event) {          
            if (event.getCode() == KeyCode.BACK_SPACE || event.getCode() == KeyCode.DELETE) {
                event.consume(); // to cancel character-removing keys               
            }
        }
    });

event.consume() 放在 if 块中只会取消这些按钮。其他的将照常工作。

这对我来说很好。

【讨论】:

  • 自从 2016 年提出这个问题后,我不再拥有曾经发生此问题的环境。我怀疑你的回答,但我无法验证它是否解决了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多