下午好。 我正在开发一个屏幕,其中我有 JTextField ,它应始终接收 UpperCase 值。看,我刚创建了一个派生自 PlainDocument 的类,在 insertString 中处理它,并且它有效。 问题是每当我编辑我的JTextField的值时,它都会覆盖字符串而不是插入我正在键入的字符串值。示例:我的字段中包含值“JoãodaSilva ”,我想在“João之后不久添加名称” Pedro “ “然后在” da Silva “之前,但是当我将光标放在键盘的位置并且我想开始输入它的写入字符串”JoãoPedrolva “而不是”JoãoPedroda 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);
}
}
}
由于
答案 0 :(得分:1)
怎么样:
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str == null) {
return;
}
super.insertString(offs, str.toUpperCase(), a);
}
答案 1 :(得分:0)
以这种方式编写方法:
@Override
public void insertString(int offset, String text, AttributeSet attributes) throws BadLocationException {
if (text != null) {
int currentBufferLength = getLength();
String currentBufferContent = getText(0, currentBufferLength);
String newText;
if (currentBufferLength == 0) {
newText = text;
} else {
newText = new StringBuilder(currentBufferContent)
.insert(offset, text)
.toString();
}
try {
super.insertString(offset, text.toUpperCase(), attributes);
} catch (BadLocationException exception) {
}
}
}
抱歉,我没有时间解释。但是,希望你比较时可以看到你做错了什么。