gpt4 book ai didi

java - 文本字段的长度和字母有限

转载 作者:行者123 更新时间:2023-12-01 19:26:57 26 4
gpt4 key购买 nike

我尝试限制 javafx TextField 的字母和最大长度。我以前已经做过很多次了,而且总是使用相同的方法,但这次我出错了。

这是我的代码:

nameTextField.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(final ObservableValue<? extends String> ov, final String oldValue, final String newValue) {
if (nameTextField.getText().length() > 30) {
String s = nameTextField.getText().substring(0, 30);
nameTextField.setText(s);
}
if (!newValue.matches("\\sa-zA-Z")) {
nameTextField.setText(newValue.replaceAll("[^\\sa-zA-Z]", ""));
}
}
});

当我仅对最大长度使用限制时,它工作正常,当我仅对字母类型使用限制时,它也工作正常。但是,当我在一个字段上使用这两个限制时,效果不正确。

字母类型的限制工作正常,但当我尝试输入超过 30 个字母时,出现“线程“JavaFX 应用程序线程”java.lang.StackOverflowError 中出现异常”

在这一行

nameTextField.setText(newValue.replaceAll("[^\\sa-zA-Z]", ""));

最佳答案

您的正则表达式匹配函数存在问题。

它总是进入第二个 if 内部,并用新字符串替换该字符串,即使它超出了限制。

所以它设置了超过限制字符的文本,然后再次发出更改事件,依此类推......这就是 stackoverflow 异常的原因。

你应该把这个

 if (!newValue.matches("[a-zA-Z]+")) 

为了获得最佳实践,您可以使用else if而不是第二个if

因为这两个条件根本不可能实现。

关于java - 文本字段的长度和字母有限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59302450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com