Deixar texto de um JTextField maiusculo

9 respostas
E
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 {
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);
         }
     }
 }

Mas não entendi como funcionar. Será que alguem poderia me dar um exemplo de commo fazer?

9 Respostas

E

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!!!

L

pode usar assim

public static final String UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";

ai a chamada no seu TextField

campo_Nome.setDocument(new JTextFieldFilter(JTextFieldFilter.UPPERCASE,20));

abrxx

V

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!!!

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

E

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

M

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?

E

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.

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

V

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.

M

uhmm… entendi, valeu!!!

E

ViniGodoy muito bom esse artigo, valeu!

Criado 23 de agosto de 2011
Ultima resposta 23 de ago. de 2011
Respostas 9
Participantes 5