下午好。我正在开发一个屏幕,其中有一个JTextField,它应该始终接收大写值。看,我刚刚创建了一个派生自PlainDocument的类,在insertString中对其进行处理,并且它起作用了。问题是,每当我编辑 JTextField 的值时,它都会覆盖字符串,而不是插入我正在输入的字符串值的中间。示例:我的字段中有值“ João da Silva ”,我想在“ João ”之后和“ da Silva ”之前添加名称“ Pedro ”,João Pedrolva ”而不是“ João Pedro da Silva ”。我希望你能理解。有人知道如何解决这个问题吗?我搜索了很多,尝试了很多方法,但无法解决。
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
public class UpperCaseField extends JTextField {
private static final long serialVersionUID = 1L;
public UpperCaseField() {
super();
}
protected Document createDefaultModel() {
return new UpperCaseDocument();
}
static class UpperCaseDocument extends PlainDocument {
private static final long serialVersionUID = 1L;
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str == null) {
return;
}
char[] upper = str.toCharArray();
for (int i = 0; i < upper.length; i++) {
upper[i] = Character.toUpperCase(upper[i]);
}
super.insertString(offs, new String(upper), a);
}
}
}
谢谢