Deixar texto de um JTextField maiusculo

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?

private void tf_NomeKeyReleased(java.awt.event.KeyEvent evt) { JTextField tf = (JTextField) evt.getComponent(); if (evt.getKeyCode()!=32 & evt.getKeyCode()!=8 & evt.getKeyCode()!=37 & evt.getKeyCode()!=39) tf.setText(tf.getText().toUpperCase()); }

Agora é só mandar ver!!!

pode usar assim

[code]public static final String UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";[/code]

ai a chamada no seu TextField

abrxx

[quote=efc]private void tf_NomeKeyReleased(java.awt.event.KeyEvent evt) { JTextField tf = (JTextField) evt.getComponent(); if (evt.getKeyCode()!=32 & evt.getKeyCode()!=8 & evt.getKeyCode()!=37 & evt.getKeyCode()!=39) tf.setText(tf.getText().toUpperCase()); }

Agora é só mandar ver!!!
[/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.

Enadrov, dê uma lida nesse post, ele explica como o Document funciona:
http://www.guj.com.br/articles/29

Galera valeu mais não consegui fazer nenhum dos dois funcionar!

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:

http://www.guj.com.br/java/142138-uppercase-em-jtextfield—solucao-generica

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.

Aliás, a Sun até mesmo criou uma classe para evitar validações com o FocusLost, chamada InputVerifier:
http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/InputVerifier.html

Enadrov. Faça simplesmente o seguinte.

  1. Crie a classe UpperCaseDocument em algum lugar do seu projeto:

public class UpperCaseDocument extends PlainDocument { @Overide public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { super.insertString(offs, str.toUpperCase(), a); } }

  1. Associe essa classe ao document do seu JTextField:

Não é necessário criar um filho do JTextField.

uhmm… entendi, valeu!!!

ViniGodoy muito bom esse artigo, valeu!