Problemas com PlainDocument sobre-escrevendo os valores

Boa tarde.
Estou desenvolvendo uma tela onde tenho um JTextField que deverá receber sempre valores UpperCase. Procurando na net e aqui mesmo no fórum acabei criando uma classe derivada da PlainDocument tratando isto no insertString, e funcionou.
O problema é que sempre que vou editar o valor do meu JTextField ele vai sobre-escrevendo a string ao invés de ir inserindo no meio da string os valores que eu vou digitando. Exemplo: Tenho o valor “João da Silva” no meu campo, e quero adicionar o nome “Pedro” logo após o “João” e antes do “da Silva”, porém quando coloco o cursor do teclado na posição que desejo e começo a digitar ele sobre-escreve a string ficando “João Pedrolva” ao invés de “João Pedro da Silva”. Espero que tenha dado para entender.
Alguém sabe como resolver isso? Procurei muito e tentei várias formas mas não consegui resolver.

[code] 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);
    }
}

} [/code]

Muito obrigado pela atenção.

Tenta desse jeito

public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { if (str == null) { return; } super.insertString(offs, str.toUpperCase(),a); }

Agora eu não sei se esse código serve para algo em seu projeto

char[] upper = str.toCharArray(); for (int i = 0; i < upper.length; i++) { upper[i] = Character.toUpperCase(upper[i]); }

abraços.

Obrigado pela resposta. Eu tentei da forma que falou, mas meu problema persiste. Ele continua funcionando da mesma maneira passando as coisas para UpperCase, mas continua sobre-escrevendo os textos, que é o que estou tentando arrumar agora…

Isso pode te ajudar.

http://www.guj.com.br/java/257224-resolvido-aceitar-apenas-letras-maiusculas-no-jtextfield