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.