下午好。 我正在開發一個屏幕,我有一個JTextField應該總是會收到UpperCase值。看,我剛剛創建了一個派生自PlainDocument的類,它在insertString中對其進行了處理。 問題是,無論何時編輯我的JTextField的值,它都會覆蓋字符串,而不是插入正在輸入的字符串值。例如:我有值「若昂·席爾瓦」在我的領域,我想添加名爲「佩德羅」不久後「若昂」和之前的「達席爾瓦」,但是當我把光標在鍵盤的位置,我想開始輸入寫入字符串得到「JoãoPedrolva」而不是「JoãoPedro da Silva」。我希望你已經明白了。 任何人都知道如何解決這個問題?我搜查了很多,嘗試了很多方法,但無法解決。java PlainDocument覆蓋值問題
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);
}
}
}
感謝
謝謝。但仍然相同=/UpperCase工作正常,我的問題是在插入一個新的字符中間值的時候重寫值。 –
您描述的覆蓋不會發生在我身上,您的代碼也不會顯示任何會導致這種情況的內容。也許你有某種KeyListener或KeyBinding讓它像你描述的那樣行事?發佈SSCCE。 – splungebob