Alguma forma de otimizar tratamento de JTextFields?

4 respostas
esmerick

Eu queria saber se alguém tem alguma forma diferente, mais otimizada para limitar o tamanho de um JTextField e limitar também quanto aos dados aceitos (menos o uso de mascaras, porque elas as vezes causam umas complicações).
Aqui está meu codigo:

public class TratamentoLetras extends KeyAdapter {

    int quantidade;

    public TratamentoLetras(int quant) {
        quantidade = quant;
    }

    public void keyTyped(KeyEvent e) {
        JTextField tf = (JTextField) e.getSource();
        InputMap map = tf.getInputMap();
        map.put(KeyStroke.getKeyStroke('V', InputEvent.CTRL_DOWN_MASK), "beep");
        map.put(KeyStroke.getKeyStroke('C', InputEvent.CTRL_DOWN_MASK), "beep");
        if (!Character.isLetter(e.getKeyChar()) 
              || tf.getText().length() >= quantidade) {
            e.consume();
        } 

    }

    
}

O para somente números ta quase a mesma coisa, mas substituindo Letter pr Digit.
Eu também fiz uma parte pra não aceitar Ctrl+v ou Ctrl+v mais ele tem um defeitozinho la…se alguém tiver uma alternativa…
agradeço desde ja!

4 Respostas

E

Tem sim cara…
antes d qquer coisa… faça um componente que extenda o JTextField… assim vc vai poder customizá-lo da maneira que bem entender… pois há propriedades dele que devem ser alteradas para permitir esse tipo de validação…

Estude as seguintes classes :

-PlainDocument, ou a interface Document para fazer tratamentos quaisquer nos textos, desde tamanho até definir palavras de entrada específicas.

-InputVerifier para serem feitas validações no texto, que retorna true ou false se o texto digitado é valido perante as especificações que vc implementar. Também permite tratamento de foco no componente caso a validação seja false.

Espero q t ajude… abracow

esmerick

Ajuda sim! brigadão!

GTOJava

Tenho uma dúvida :

No caso de inserir texto ta ocorrendo tudo certo, o problema é quando eu do um “Ctrl + X” la no JTextField e ele não entra no evento (creio que obviamente pelo nome ser “insertString” )

Minha dúvida é, como fazer detectar quando ele apaga todo o conteudo do JTextField

esmerick

Ai você poderia fazer várias coisas… não sei se tem algum método específico, mas simplesmente seria você chamar um variável.getText().length() == 0, e isso pode ser chamado de um key event por exemplo, no caso verificar se o BackSpace foi precionado, ou poderia ser também ser na perda do foco se estiver implementando um FocusListener…

Provavelmente há outras formas de fazer, mas as que lembro agora são essas… Malz a demora ^^

Criado 22 de junho de 2011
Ultima resposta 2 de jul. de 2012
Respostas 4
Participantes 3