我试图弄清楚如何在运行时检查文本字段中是否输入了数字,然后我想执行Backspace来自行删除它。我的代码是
@FXML
public void onKeyTyped(KeyEvent event) {
if (!(event.getText().matches("[a-z]"))) {
event.consume();
}
}
我不明白为什么它不起作用。也许我不理解在运行时更改某些东西的概念。任何输入,我们将不胜感激!
答案 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();
}