Galera estou tentando deixar um código de um JTextField maiusculo. Dei uma olhada na API e encontrei o seguinte exemplo:
public class UpperCaseField extends JTextField {
[code] public UpperCaseField(int cols) {
super(cols);
}
protected Document createDefaultModel() {
return new UpperCaseDocument();
}
static class UpperCaseDocument extends PlainDocument {
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]
Mas não entendi como funcionar. Será que alguem poderia me dar um exemplo de commo fazer?
Não use eventos para lidar com o JTextField! Isso não funciona caso o usuário use CTRL+C, CTRL+V e nem é multiplataforma. O correto é usar o Document, como no tópico original.
ei ViniGodoy, mas se eu incluir um evento focuslost no jtextfield, mesmo com o ctrl+c, ctrl+v ele irá funcionar não é? ou mesmo assim você não aconselha a usar eventos no jtextfield?
[quote]Não use eventos para lidar com o JTextField! Isso não funciona caso o usuário use CTRL+C, CTRL+V e nem é multiplataforma. O correto é usar o Document, como no tópico original.
[/quote]
Bem, é uma maneira, mas não a melhor das maneiras.
O Próprio Viny explicou como se faz, de uma olhada aqui que esta bem fácil a forma como ele explicou:
Mesmo assim. O Swing pode disparar o focusLost em momentos inoportunos. O programador também pode usar um setText(), e isso não dispara o evento.
A única forma 100% confiável de manipular o conteúdo do JTextField é o Document.