[RESOLVIDO] - JTextField ao conter 13 Caracteres chamar evento

14 respostas
viny_scholl

Olá Pessoal, estou com um probleminha aqui!

Gostaria que meu campo chamado tfCodigo que é um JTextField realizasse um evento automaticamente quanto o tivesse 13 caracteres Inserido!

Já tentei fazer a Contagem de caracteres mas não esta funcionando!

Deem uma olhada no Código:
tfCodigo.addFocusListener(new FocusAdapter() {
						
						public void focusGained(FocusEvent evt) {
							System.out.println("Evento tfCodigoFocusGained CHAMADO");
								tfCodigoFocusGained(evt);
						}
						
						private void tfCodigoFocusGained(FocusEvent evt) {
							if (tfCodigo.getText().length() == 13)  {
							       tfCodigoFocusLost(evt);
							}
							
						}
.

OBS: Minha Aplicação já inicia com Foco no tfCódigo !

Não sei se fui bem claro, mas qualquer duvida perguntem!

14 Respostas

viny_scholl

Agora eu me liguei numa coisa, eu Não posso desenvolver essa evento no focusGained pois se a minha Aplicação Inicia com o Foco no tfCodigo ele inicia Nulo então da exceção!

Eu teria que desenvolver algo coco:

QUANDO o tfCodigo tiver 13 caracteres chamar o Evento !

Alguem poderia me Ajudar nisso!

Estou iniciando em java então tenho alguns problemas ainda!

Obrigado!

S

ola

vc pode usar o metodo keyReleased da interface keyListener.

private void teu_jTextField_KeyReleased(java.awt.event.KeyEvent evt) {                                                  
      //teu code aki
}

At+

viny_scholl

seliaj:
ola

vc pode usar o metodo keyReleased da interface keyListener.

private void teu_jTextField_KeyReleased(java.awt.event.KeyEvent evt) {                                                  
      //teu code aki
}

At+

Olá Selijad.

É para utilizar dentro do focusGained?

O que faz o metodo keyReleased ?

Vou tendo aqui!

Valeu!

S

ola

o focusGained é um metodo da interface FocusListener, ele é acionado assim que o objeto ganha foco.

o keyReleased é um metodo da interface KeyListener, ele é acionado assim que uma tecla e solta.

o codigo que voce criou para focusGained passe ele para keyReleased.

private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) {
        if(jTextField1.getText().length() == 13){
            System.out.println("Voce digitou a Decima Terceira Letra");
        }
    }

At+

viny_scholl

seliaj:
ola
vc pode usar o metodo keyReleased da interface keyListener.private void teu_jTextField_KeyReleased(java.awt.event.KeyEvent evt) { //teu code aki }At+

Amigo, fiz assim:

tfCodigo.addKeyListener(new KeyListener() {	
						
						public void keyReleased(KeyEvent evt) {
								 tfCodigoKeyReleased(evt);	
						}						
					});

Porem não esta funcionan, pois quero chamar o Evento tfCodigoFocusLost que é um FocusEvent e por isso da erro!
Ele tenta transformar meu tfCodigoFocusLost em KeyListener !

Tah Osso Einh!

viny_scholl

seliaj:
ola
o focusGained é um metodo da interface FocusListener, ele é acionado assim que o objeto ganha foco.
o keyReleased é um metodo da interface KeyListener, ele é acionado assim que uma tecla e solta.
o codigo que voce criou para focusGained passe ele para keyReleased.

private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) { if(jTextField1.getText().length() == 13){ System.out.println("Voce digitou a Decima Terceira Letra"); } }
At+


Ok, Vou testar!

[size=18]Mesmo assim, Valeu pela Ajuda! :smiley:
[/size]

S

viny,

voce quer o queria a realizacão na 13° digito.

por que vc que usa focuslost.

so colocar seu codigo aqui.

tfCodigo.addKeyListener(new KeyListener() {	
	public void keyReleased(KeyEvent evt) {
                if (tfCodigo.getText().length() == 13) {
                    System.out.println("Voce digitou a Decima Terceira Letra");
                }

	}						
});

At+

viny_scholl

seliaj:
viny,

voce quer o queria a realizacão na 13° digito.

por que vc que usa focuslost.

so colocar seu codigo aqui.

tfCodigo.addKeyListener(new KeyListener() {	
	public void keyReleased(KeyEvent evt) {
                if (tfCodigo.getText().length() == 13) {
                    System.out.println("Voce digitou a Decima Terceira Letra");
                }

	}						
});

At+

É assim amigo, estou desenvolvendo uma frente de Caixa, onde os produtos são cadastrados com 13 caracteres,
eu chamo o produto pelo codigo e ao perder o foco realizo a venda!

Mas eu queria que o sistema Perdesse o foco Automaticamente assim que o tfcodigo estivesse com 13 caracteres do codigo do produto!

Segue o tfCodigoFocusLost:

private void tfCodigoFocusLost(FocusEvent evt){ System.out.println("Entrou em tfCodigoFocusLost");
	
	try {
		if (!tfCodigo.getText().equals("")) { // verifica se esta vazio					
				produtobean = controle.searchProductsByCod(tfCodigo.getText()); // chama o produto pelo Código
				jTextField2.setText(produtobean.getDescricao()); // chama descrição do produto
				jTextField4.setText(String.valueOf(produtobean.getValorVenda()));	// chama valor da venda do produto
				
				jTextField3.requestFocus(); // passa o foco para preencher a quantidade
			} 
	} catch (Exception e) { // se ocorrer exceção 
		JOptionPane.showMessageDialog(null, "Produto Não Cadastrado!!");
		System.out.println("Entrou em Catch");
		tfCodigo.setText(""); // limpa o campo tfCodigo
		tfCodigo.requestFocus(); // passa o foco para o tfCodigo 
	} finally {		
		 	
	}
						
	}

É por isso que não posso mecher no (Focus Event evt) de tfCodigoFocoLost !!

S

viny,

ja que voce não quer mover seu codigo do lostfocus, então faça que ao chegar no 13 caracter ele passe o foco para outro componente.

assim ele perde o foco e executa seu codigo

at+

viny_scholl

seliaj:
viny,

ja que voce não quer mover seu codigo do lostfocus, então faça que ao chegar no 13 caracter ele passe o foco para outro componente.

assim ele perde o foco e executa seu codigo

at+

E como eu faria isso?

Poderia me ajudar com o codigo?

viny_scholl

[size=24]Valeu seliaj ! [/size]

[size=18]Tu é o Cara!
Funcionou agora!

Valeu mesmo Cara!
Tava o DIA todo nisso ai! haha

Abração![/size]

ViniGodoy

Cuidado, eventos (lostfocus, keypressed, keyreleased, etc) são geralmente a maneira errada de se trabalhar com entrada de texto no JTextField. É difícil cancelar eventos dessa forma e é difícil também limitar os eventos, sem falar que diferentes SOs podem ter tratamentos de eventos ligeiramente diferentes.

A maneira certa de se controlar um JTextField geralmente é pelo seu Document: http://www.guj.com.br/articles/29
No caso de querer controlar a saída do foco, você também pode usar um InputVerifier: http://download.oracle.com/javase/6/docs/api/javax/swing/InputVerifier.html

viny_scholl

ViniGodoy:
Cuidado, eventos (lostfocus, keypressed, keyreleased, etc) são geralmente a maneira errada de se trabalhar com entrada de texto no JTextField. É difícil cancelar eventos dessa forma e é difícil também limitar os eventos, sem falar que diferentes SOs podem ter tratamentos de eventos ligeiramente diferentes.

A maneira certa de se controlar um JTextField geralmente é pelo seu Document: http://www.guj.com.br/articles/29
No caso de querer controlar a saída do foco, você também pode usar um InputVerifier: http://download.oracle.com/javase/6/docs/api/javax/swing/InputVerifier.html

Valeu pela dica ViniGodoy!

Estou recem começando em Java são dicas como essa que me levam para o caminho Certo!
É Sério que com diferentes SO elas podem sofrer variações?
Obrigado!

ViniGodoy

Sim, por isso é importante ler bem a documentação. Aproveita que vc tá começando e leia as 15 dicas úteis no uso de Swing:

Criado 27 de março de 2011
Ultima resposta 27 de mar. de 2011
Respostas 14
Participantes 3