mar*_*yam 1 java javafx javafx-2 scenebuilder
我有一个文本字段,它的输入数据应该是 16 位,在第 4、8、12 位之后应该输入空格,我写了这段代码,当我添加第二个内部条件 if 时,程序有堆栈溢出错误,我该怎么办?有什么问题?请帮忙。这是我的代码,我使用更改侦听器:
cardNumberField.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> ov, String t, String t1){
if (t1.length() > 0) {
String s = null;
s = t1.substring(t1.length() - 1,t1.length());
if (!s.matches("\\d") || t1.length() > 19) {
cardNumberField.setText(t);
}
if(t1.length() == 4 || t1.length() == 9 || t1.length() == 14){
cardNumberField.setText(t1 + " ");
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
假设您在文本字段中有三个字符(“123”)并键入第四个字符,即数字,例如“4”。当然,这会调用您的侦听器。
第一个条件为假(因为最后一个字符是数字,长度小于16)。第二个条件为真,因为t1.length()==4。所以你现在调用setText("1234 "). 这会更改文本,因此它会再次调用您的侦听器。这次第一个条件匹配(因为最后一个字符不是数字)。所以现在你调用setText("1234").
这会更改文本,因此它会调用您的侦听器。第一个条件为假(因为最后一个字符是数字,长度小于16)。第二个条件为真,因为t1.length()==4。所以你现在调用setText("1234 "). 这会更改文本,因此它会再次调用您的侦听器。这次第一个条件匹配(因为最后一个字符不是数字)。所以现在你调用setText("1234").
等等。因此,您基本上具有无限递归,并且在某些时候(很快)堆栈无法容纳所有方法调用。
要修复它,请修复您的逻辑。最好防止用户输入无效文本,而不是倾听它并在事后尝试纠正它。你可能想看看这个。
| 归档时间: |
|
| 查看次数: |
466 次 |
| 最近记录: |