Re:Digitação em uppercase

5 respostas
keller

Já pensou em fazer um KeyListener Generico?

Hoje to feliz porque vou pra Criciuma! \o/
Entao segue o codigo de como fazer isso :smiley:

Faça um KeyListener mais ou menos assim:

private KeyListener klUpCase = new KeyListener(){
       public void keyTyped(KeyEvent e){/*nothing to do?*/}
       public void keyReleased(KeyEvent e){/*nothing to do?*/}
       public void keyPressed(KeyEvent e){

          JTextField source = (JTextField) e.getSource();
          String data = source.getText();
          source.setText("");
          source.validate();

          data = data.toUpperCase();
          source.setText( data );
          source.validate();

       }
    };

Depois adicione ele nos JTextFields que devem ser em UpCase

txtNome.addKeyListener( this.klUpCase );
txtEndereco.addKeyListener( this.klUpCase );

Valeu? Até… :thumbup:
[s]

5 Respostas

G

Também estou precisando disso, fiz como vc falou, mas dessa forma é mostrada a palavra se transformando de minusculo p/ maiusculo.

Preciso de uma forma que mostre sempre em maiusculo, independente de como o usuario digitar.

Tem como? Obrigado !

Gustavo

G

desculpe, duplicou o post.

keller

Tente substituir o KeyListener pelo DocumentListener,
porem eu nao vejo problema nenhum em ver a palavra se transformar
em maiuscula…

Nao garanto que com o DocumentListener voce nao
ira ver a palavra se transformando em maiuscula, mas vale a tentativa…

Valeu? Até… :thumbup:
[s]

Rodrigo_Manhaes

Você poderia usar algo assim:

public static JTextField getUpperField(int columns)
{
    JTextField field = new JTextField(columns);
    field.setInputVerifier(new UpperVerifier());
    return field;
}

onde a classe UpperVerifier é

public class UpperVerifier extends VerifierDecorator
{
    
    public UpperVerifier()
    {
        this(null);
    }
    
    public UpperVerifier(InputVerifier next)
    {
        super(next);
    }
    
    public boolean verify(JComponent input)
    {
        JTextComponent textComponent = (JTextComponent) input;
        textComponent.setText(textComponent.getText().toUpperCase());
        return super.verify(input);
    }
}

e VerifierDecorator é

public abstract class VerifierDecorator extends InputVerifier
{
    private InputVerifier next;
    
    public VerifierDecorator(InputVerifier next)
    {
        super();
        this.next = next;
    }
    
    public InputVerifier getNext()
    {
        return this.next;
    }
    
    public boolean verify(JComponent input)
    {
        if (this.next != null)
            return next.verify(input);
        else
            return true;
    }
}

para usar, é algo como

private JTextField textField = FormattedTextFactory.getUpperField();

assumindo que a classe que contém o primeiro método mostrado aqui se chama FormattedTextFactory.

Para casos em que uma verificação única é exigida, o esquema de decoração é dispensável. Porém, isto tudo não vai fazer os caracteres ficarem maiúsculos ao digitar, e sim ao deixar o componente.

Para ficarem maiúsculos ao digitar, você pode usar

teste = new JFormattedTextField();
MaskFormatter formatter = new MaskFormatter();
try
{
    formatter.setMask("UUUUUUUUUUUUUUUUUUUUUUUUUUUU");
}
catch (ParseException e)
{
    e.printStackTrace(System.err);
}
formatter.setPlaceholderCharacter(' ');
formatter.install(teste);

onde a quantidade de U’s será a quantidade de caracteres maiúsculos que o campo aceitará. Isto funcionará do jeito que você quer, mas considero muito mais adequado e elegante para este caso o uso de verifiers.

Rodrigo_Costa

Pessoal,

Tenho um sistema em Java/Swing :smiley: e meu cliente sugeriu que impedisse a digitação de caracteres minúsculos :cry: . Será que tem como eu fazer com que a digitação dos dados nos forms converta para maiúscula sem que eu precise criar eventos keypress em todos os campos :?: ?

Flw,

Criado 31 de março de 2006
Ultima resposta 31 de mar. de 2006
Respostas 5
Participantes 4