在运行时检查文本字段是否包含数字

时间:2019-04-12 20:06:34

标签: java javafx scenebuilder

我试图弄清楚如何在运行时检查文本字段中是否输入了数字,然后我想执行Backspace来自行删除它。我的代码是 @FXML public void onKeyTyped(KeyEvent event) { if (!(event.getText().matches("[a-z]"))) { event.consume(); } }

我不明白为什么它不起作用。也许我不理解在运行时更改某些东西的概念。任何输入,我们将不胜感激!

2 个答案:

答案 0 :(得分:0)

我猜是因为您在应检查0-9时正在检查a-z。

编辑:糟糕,您是对的,我错过了!。 至于运行时,不是所有事件都在运行吗?

答案 1 :(得分:0)

您可以尝试此操作(仅限FX11)

    //check if character typed is a number
    if (event.getCharacter().matches("[0-9]"))
    {
        event.consume();

        //move caret back one step as we do not want the typed digit
        //and want the caret to remain after last entered text
        textField.backward();

        //delete the typed digit
        textField.deleteNextChar();

    }

请注意,这使用event.getCharacter()而不是event.getText()。对我来说,getText()始终为空,如以下链接所示:

JavaFX KeyEvent.getText() returns empty?

如果您想按照原始方式检查它是否不等于a-z,也请注意也要考虑A-Z。或者在检查匹配项是否区分大小写之前将字符转换为小写。

仅FX8

if (event.getCharacter().matches("[0-9]"))
    {
        event.consume();

    }