好的,我目前正在 JavaFX 中设计 GUI。我有一个需要允许 double 的文本框。目前它允许 double ,但它仍然允许用户添加多个小数
我想要的是:92.8123
我不想要的:92..5.78
我尝试摆弄它,但我对正则表达式的理解不足以将文本框限制为我想要的内容。
tpo.textProperty().addListener((observable, oldValue, newValue) -> {
if (!newValue.matches("\\d*")) tpo.setText(newValue.replaceAll("[^\\d.]", ""));
});
tpo是文本框的名称
最佳答案
我认为这可能会满足您的要求:
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
...
TextField tpo = ...;
tpo.setTextFormatter(new TextFormatter<>((change) -> {
String text = change.getControlNewText();
if (text.matches("\\d*\\.?\\d*")) {
return change;
} else {
return null;
}
}));
对于应用于 TextField
的每个更改,这将检查新文本是什么并确保它与给定的模式匹配。由于用户可能一次输入一个字符(而不是粘贴),因此我们需要允许模式的后面部分可能尚未键入,因此我们需要允许在点后输入零个或多个数字,并且如果我们想要的话为了让用户能够完全删除他们的输入,我们需要一切都是可选的。您需要在提交时检查最终模式,以验证他们输入了完整有效的 double 。
关于java - 需要帮助将文本框限制为仅显示十进制数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54134684/