Deixar texto de um JTextField maiusculo

9 respostas
Enadrov
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

ViniGodoy

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

Enadrov

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

mauricionarcizo

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

ViniGodoy

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.

mauricionarcizo

uhmm… entendi, valeu!!!

Enadrov

ViniGodoy muito bom esse artigo, valeu!

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