【发布时间】:2013-02-16 07:34:05
【问题描述】:
下午好。 我正在开发一个屏幕,其中有一个 JTextField 应该始终接收 UpperCase 值。看,我刚刚创建了一个派生自 PlainDocument 的类,在 insertString 中对其进行处理,并且它起作用了。 问题是,每当我编辑 JTextField 的值时,它都会覆盖字符串,而不是插入我正在输入的字符串值的中间。示例:我的字段中有值“João da Silva”,我想在“João”之后不久添加名称“Pedro” " 并且在 "da Silva" 之前,但是当我将光标放在键盘的位置并且我想开始输入它时,写入字符串得到 "João Pedrolva ” 而不是“若昂·佩德罗·达席尔瓦”。我希望你已经给予理解。 有人知道怎么修这个东西吗?找了很多方法,试了很多方法都解决不了。
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);
}
}
}
谢谢
【问题讨论】:
标签: java jtextfield uppercase