我正在为我的软件创建帐户创建工具。在此工具中,它会询问您的姓名,电子邮件地址等,并使用JTextFields来收集此信息。
我想尝试不同的东西并实时修复无效信息。我设置了代码,以便每当文本字段发生更改时,都会运行一个方法来删除不需要的字符并执行其他操作。代码类似如下:
private void firstNameUpdate(){
String name = firstNameField.getText();
int pos = firstNameField.getCaretPosition();
if (!name.equals("")){
name = name.replaceAll("[^a-zA-Z]", "").toLowerCase();
if (!name.equals("")){
name = name.substring(0, 1).toUpperCase() + name.substring(1);
validFirstName = true;
} else {
validFirstName = false;
}
} else {
validFirstName = false;
}
firstNameField.setText(name);
firstNameField.setCaretPosition(pos);
}
代码,' firstNameField.setText(name);'是导致错误的原因。我知道方法中的其他所有内容都有效,因为我尝试将其打印到控制台。
我见过的所有消息都说这应该有效。我做错了什么?
答案 0 :(得分:2)
对于文本组件的实时过滤,您应该使用DocumentFilter
。
查看Implementing a DocumentFilter
和these examples。
可能的原因是您遇到并发修改错误,您尝试在修改基础字段文档时尝试修改它。