Listener JTextField comprimento do texto [Resolvido]

6 respostas
J

Boa noite,

Estou fazendo uma aplicativo desktop
Estou tentando fazer um listener ou em algum evento do JTextField para que enquanto a senha for igual a zero o jlabel fica sem icone, enquanto for maior que 0 e menor 4 apareça o icone "X" e enquanto for maior ou igual a 4 aparece o icone "V" igual a alguns sites. (Igual está na imagem).

estou colocando os códigos que usei nos eventos e que usei nos listeners (testei varios eventos e listeners)

este é o que eu uso nos eventos (foi o mais perto de funcionar corretamente, no evento keyTyped):
ImageIcon OKNeg;
        if (txSenha.getText().length()==0){
            lbSenhaAceita.setIcon(null);
        }else if (txSenha.getText().length()>0 && txSenha.getText().length()<4){
            OKNeg = new ImageIcon(getClass().getResource("/IconesGerais/gr_erro.png"));
            lbSenhaAceita.setIcon(OKNeg);
        }else if (txSenha.getText().length()>=4){
            OKNeg = new ImageIcon(getClass().getResource("/IconesGerais/gr_ok.png"));
            lbSenhaAceita.setIcon(OKNeg);
        }
este é o que eu uso nos listeners:
public class ListenerSenha implements InputMethodListener {

    private int Comprimento;

    protected ListenerSenha(int txLenght) {
        this.Comprimento = txLenght;
    }

    @Override
    public void inputMethodTextChanged(InputMethodEvent event) {
        if (this.Comprimento == 0) {
            AdmCadUsuario.getInstance().setSenhaNulo();
        } else if (this.Comprimento < 0 && this.Comprimento > 4) {
            AdmCadUsuario.getInstance().setSenhaNeg();
        } else if (this.Comprimento >= 4) {
            AdmCadUsuario.getInstance().setSenhaOK();
        }
    }

    @Override
    public void caretPositionChanged(InputMethodEvent event) {
    }
}
e eu adiociono o listener assim:
txSenha.addInputMethodListener(new ListenerSenha(txSenha.getText().length()));

6 Respostas

U

Javariano vc pode add um evento do tipo KeyListener, lá terá um método:

public void keyTyped(KeyEvent arg0) {
//Dispara instrução ao digitar

			}

Ai nele vc pode implementar o lenght.

J

urbgames foi o que eu tentei fazer mas nao funcionou, é aquele exemplo onde eu disse que chegou mais perto de funcionar…

ViniGodoy

Para esse tipo de coisa é melhor usar um Document: http://www.guj.com.br/articles/29

J

Eu consegui resovler sem o document, não sei se é o mais certo de se fazer mas até agora não achei problema…
Com o Document eu consegui fazer uma foramatacao para dinheiro e para horas, mas nao para isso ViniGodoy, mas valeu pela ajuda mesmo assim.

eu coloquei no evento “keyReleased” e mudei onde estava “comprimento > 0” por exemplo, eu mudei para comprimento >=1, e por enquanto ta funcionando certinho, não achei problemas, mas caso haja eu colocarei aqui e se alguem achar, por favor também coloque
o código esta aqui:

private void txSenhaKeyReleased(java.awt.event.KeyEvent evt) {   
        ImageIcon OKNeg;
        if (txSenha.getText().length() == 0) {
            lbSenhaAceita.setIcon(null);
        } else if (txSenha.getText().length() >= 1 && txSenha.getText().length() <= 3) {
            OKNeg = new ImageIcon(getClass().getResource("/IconesGerais/gr_erro.png"));
            lbSenhaAceita.setIcon(OKNeg);
        } else if (txSenha.getText().length() >= 4) {
            OKNeg = new ImageIcon(getClass().getResource("/IconesGerais/gr_ok.png"));
            lbSenhaAceita.setIcon(OKNeg);
        }
    }
ViniGodoy

Se quer ver onde os problemas começarem, copie um texto e faça paste em seu campo de senha. Lembre-se que dá para fazer isso com o mouse, sem usar as teclas, e portanto, sem evento de KeyReleased.

Dá para fazer com Document sim, é o jeito certo. Ou, no mínimo, com um DocumentListener.

Eventos dificilmente são a forma correta de se resolver qualquer coisa com o JTextField.

WellingtonRamos

O Document provê o tamanho do texto através do método getLength().

Dê uma olhada neste exemplo para ver se te ajuda:
http://www.guj.com.br/31-como-validar-tamanho-e-caracteres-entrados-ao-inserir-texto-em-campos-de-texto-do-swing#answer-60

Criado 8 de abril de 2013
Ultima resposta 8 de abr. de 2013
Respostas 6
Participantes 4